JAVA 자바 데이터 형변환, 변수 종류 및 적용예제

Devel/JAVA|2020. 8. 31. 19:03
반응형

 

#데이터의 형 변환

 

a. 묵시적 형변환

-자동형 변환 또는 promotion이라고 한다.

(작은것->큰 byte로 자동변환)

byte -> short -> int -> long -> float -> double

char - > int

(바이트 값을 쇼트 값에 저장시켜도 문제 없고, 쇼트 값을 인트값에 저장시켜도 문제 없다.)

+ 큰값을 작은 값에 넣으려고 할때

int 보다 작은 데이터형간의 연산결과는 int로 자동으로 변경된다. 

예> short s = 10; short s2 = 20; short s3 = s + s2; //에러

앞 s3는 short의 형식 값이고, 결과 값 s+ s2는 int의 형식 값이라 에러 생성

해결: int s3= s+ s2; or short s3= (short) (s+ s2);

 

-기본 데이터형 또는 참조 데이터형(상속관계) 모두 가능하다.

 

+ 명시적 형변환

//명시적 형변환

int m = 10;

short n2 = (short)m;

 

ex.

 

[public class typeCasting {

      public static void main(String[] args) {

            // TODO Auto-generated method stub

//데이터 타입 변경(자동으로 변환)

            //1.byte->short->int->long-> float-> double(작은 -->큰)

            byte b =10;

            short b2 = b;

            int b3 = b2;

            long b4 = b3;

            float b5 = b4;

            double b6 = b5;

            

            //2.char -> int

            char n ='A';

            int n2 = n+1;

       System.out.println(n2);

            

            //3.int보다 작은 타입의 연산결과는 int로?

            short x = 10;

            short x2 = 20;

            int x3 = x+ x2;

                        

      //4. 문자열과 + 문자열이 아닌 데이터-> 연결된 문자열로 변환

                        System.out.println("10"+1+2+3);

            System.out.println(1+2+3+"10");

//          System.out.println("10"-1);

            

            //문자를 정수로 변환

            String k ="10";

            System.out.println(k+20);//1020

            int k2 = Integer.parseInt(k);//문자->정수 int변환

            System.out.println(k2+20);//30

            

            //정수-> 문자로 변환

            //10=>>"10"

            //자바스크립트 : toString()

            //자바: String.valueOf(10) ->"10"

            //String.valueOf(3.14)->"3.14"

            //String.valueOf(true)->"true"

            System.out.println(String.valueOf(10)+10);//1010

            

            //5.작은타입과 큰타입이 연산-> 큰타입

            int p =100;

            double p2 = 3.14;

            double p3 = p+p2;   ]

 

**문자를 숫자로 바꾸는 문법

integer.parseInt(문자 10을 정수 10으로 변환)

 

 

 

 

 

 

ex. +변수가 선언된 블럭이 변수를 사용 할 수 있는 범위

메인블럭에서 선언된 값은 하위 블럭 안에서도 사용 가능.

**위에서부터 차례로 선언되기 때문에, A블럭 뒤에 test 변수 선언이 된다면, A블럭의 sysout(test)가 에러남.

 

public class Sample02_variable5_1 {//클래스블럭

      public static void main(String[] args) {//main블럭

            // TODO Auto-generated method stub

            //자바는 블럭 scope(자바스크립트는 함수 scope)

            int test =100;

            {//A블럭

                    int num =10;

                    System.out.println(num);

                    System.out.println(test);

            }//A 블럭

            

            //System.out.println(num);//블럭 밖에서는 인식불가

            {//B블럭

                  int num=20;

                  System.out.println(num);

                  System.out.println(test);

                  

            }//B블럭

            //System.out.println(num);

      }//main 블럭

      

}//클래스블럭

 

 

#변수의 사용범위(scope)

함수나 메인 안에 선언된 변수는 #로컬변수, 메서드 안에서 선언.

#인스턴스변수, 멤버변수 : 클래스 단에서 선언된 변수

 

멤버 변수를 메인단에서 사용하려면 새로운 객체 생성해서 사용.

public class Sample02_variable5_3 {

String name;

char c;

int m; //인스턴스 변수(instance variable)

            //생성시점:객체생성(클래스생성) new ~ 객체소멸(클래스종료), new키워드사용

            //메모리 : 힙(heap)

            //초기화 안하면 자동초기화된다.

//정수 :0, 실수:0.0, char:'u\0000', boolean:false, 참조행 :null

static int k; //static변수(클래스변수)

//생성시점: 프로그램시작~ 프로그램 종료, new없이 사용

//메모리: method area(클래스정보, static,상수,,,)

//초기화 안하면 자동초기화 된다.

public static void main(String[] arges) {

      //로컬변수(local variable):메서드안에서 선언

      //생성시점 : 메서드호출~ 메서드 종료

      //메모리 :스택(stack)

      //주의할점:반드시 사용전에 초기화해야한다.

      int n =0;

      System.out.println(n); //메인 로컬변수 사용

      Sample02_variable5_3 test_1=new Sample02_variable5_3();

      //멤버변수 사용을 위해 객체 생성

      System.out.println(test_1.name);//생성 객체 멤버 변수 사용

}     

      

}

 

ex.

public class Member_Test {//class블럭

      //멤버, 인스턴스변수 - class 블럭에 선언

      //선언 후 초기화를 하지 않아도 된다. 초기화 불필요-사용시자동초기화

      //함수 안에 new로 필요한 만큼 객체 생성 사용

      String name;

      String phoneNumber;

      String address;

      char gender;      

      public static void main(String[] args) {//main 블럭

            // TODO Auto-generated method stub

//로컬변수(메소드/함수에 선언된 변수), 선언+초기화후에 사용

            int num =10;

            System.out.println("로컬변수"+num);

            

            Member_Test mem1 = new Member_Test(); //객체생성

            mem1.name="홍길동";//생성객체 접근 name멤버변수 저장

            Member_Test mem2 = new Member_Test(); //객체생성

            mem2.name="이순신";//생성객체 접근 name멤버변수 저장

            System.out.println(mem1.name);//생성객체 멤버변수 사용

            System.out.println(mem2.name);//생성객체 멤버변수 사용

            Member_Test mem3 = new Member_Test(); //객체생성

            mem3.name="이철원";//생성객체 접근 name멤버변수 저장  

            mem3.address= "서울";//생성객체 접근 name멤버변수 저장      

            System.out.println(mem3.name +"주소"+ mem3.address);

      }//main 블럭

}//class 블럭

 

+심화

public class Member_Test {//class블럭

      //멤버, 인스턴스변수 - class 블럭에 선언

      //선언 후 초기화를 하지 않아도 된다. 초기화 불필요-사용시자동초기화

      //함수 안에 new로 필요한 만큼 객체 생성 사용

      static int num = 10;//초기값을 안주면 type의 기본값으로 지정, static 넣어주면 객체생성없이 사용 가능

      String name;

      String phoneNumber;

      String address;

      char gender;      

      public static void main(String[] args) {//main 블럭

            // TODO Auto-generated method stub

//로컬변수(메소드/함수에 선언된 변수), 선언+초기화후에 사용

            int num =10;

            System.out.println("로컬변수"+num);

            System.out.println(Member_Test.num);//static변수의 사용. 클래스 이름. 변수이름, 객체생성 필요 없음.

//          System.out.println(name);//에러 객체생성 필요

//          Member_Test mem1 = new Member_Test(); //객체생성

//          mem1.name="홍길동";//생성객체 접근 name멤버변수 저장

//          Member_Test mem2 = new Member_Test(); //객체생성

//          mem2.name="이순신";//생성객체 접근 name멤버변수 저장

//          System.out.println(mem1.name);//생성객체 멤버변수 사용

//          System.out.println(mem2.name);//생성객체 멤버변수 사용

//          Member_Test mem3 = new Member_Test(); //객체생성

//          mem3.name="이철원";//생성객체 접근 name멤버변수 저장  

//          mem3.address= "서울";//생성객체 접근 name멤버변수 저장      

//          System.out.println(mem3.name +"주소"+ mem3.address);

            

      }//main 블럭

}//class 블럭

 

+

public class Member_Test {//class블럭

      //멤버, 인스턴스변수 - class 블럭에 선언

      //선언 후 초기화를 하지 않아도 된다. 초기화 불필요-사용시자동초기화

      //함수 안에 new로 필요한 만큼 객체 생성 사용

      static int num = 10;//초기값을 안주면 type의 기본값으로 지정, static 넣어주면 객체생성없이 사용 가능

      String name = "홍길동";

      String phoneNumber;

      String address;

      char gender;      

      public void printinfo() {//멤버메소드(함수) 객체마다 소유

                  System.out.println(name+""+phoneNumber+""+address+""+gender);

      }

      public static void main(String[] args) {//main 블럭

            // TODO Auto-generated method stub

//로컬변수(메소드/함수에 선언된 변수), 선언+초기화후에 사용

            int num =10;

//          System.out.println("로컬변수"+num);

//          System.out.println(Member_Test.num);//static변수의 사용. 클래스 이름. 변수이름, 객체생성 필요 없음.

//          Member_Test mem1 = new Member_Test();

//          System.out.println(mem1.name);            

            Member_Test mem1 = new Member_Test(); //객체생성

            mem1.name="홍길동";//생성객체 접근 name멤버변수 저장

            Member_Test mem2 = new Member_Test(); //객체생성

            mem2.name="이순신";//생성객체 접근 name멤버변수 저장

            mem1.printinfo();//함수가 객체마다 다르게 들어간다.

            mem2.printinfo();

            System.out.println(mem1.name);//생성객체 멤버변수 사용

            System.out.println(mem2.name);//생성객체 멤버변수 사용

            Member_Test mem3 = new Member_Test(); //객체생성

            mem3.name="이철원";//생성객체 접근 name멤버변수 저장  

            mem3.address= "서울";//생성객체 접근 name멤버변수 저장      

            System.out.println(mem3.name +"주소"+ mem3.address);

            

      }//main 블럭

}//class 블럭

 

 

 

+ex.

객체 어떻게 사용하는가.

 

#로컬변수의 특징

public class Stu_Test {

      String name;//멤버변수 ,객체생성, 초기값 넣어줄 필요 없다. 자동초기화, 객체정보 저장

      int age;

      

      public void printInfo() { //멤버메소드, 객체생성, 그냥 호출해서 쓰면 된다, 동작관련

      int num =1;//로컬변수

      num= num+10;

      System.out.println("printInfo() num====" + num);

      System.out.println(name+ ":" + age);

            

      }

      public static void main(String[] args) {

            // TODO Auto-generated method stub

            Stu_Test st_1 = new Stu_Test();

//          System.out.println(st_1);  //Stu_Test@5ebec15 객체의 주소, 이 주소를 찾아가서

            st_1.name = "홍길동";

            st_1.age = 25;

            st_1.printInfo();

            Stu_Test st_2 = new Stu_Test();

            st_2.name = "이순신";

            st_2.age = 26;

            st_2.printInfo();

      }

}

 

 

 

 

 

 

 

댓글()
loading