기본 자료형 (primitive data type)
-자바 컴파일러에 의해서 해석되는 자료형
참조 자료형 (reference data type)
-자바 API에서 제공되거나 프로그래머에 의해서 만들어진 클래스를 자료형으로 선언하는 경우
-클래스, 인터페이스, 배열
논리형= 1byte
문자형= 2byte = 정수형에 포함 문자도 숫자로 코드
실수형=오차가있을수있다. double=정밀도가 높다
예제
public class VariableTypes { public static void main(String[] args){ //1.논리형(true,false) System.out.println("====논리형===="); boolean b = true; //boolean b = 1; //자바에선 True=1 불허 System.out.println("b = " + b); //2.문자형 (크기:2byte, 표현범위:0~65,535 //다국어처리를 위한 유니코드(unicode)방식 System.out.println("====문자형===="); char c1 = 'A'; //내부적으로는 아스키코드 65에 해당 char c2 = 65; //A에 해당하는 는 아스키코드 값 65 char c3 = '\u0041'; //\//u//는 16진수유니코드로 표현 하는거 char c4 = '자'; char c5 = '\uc790'; //자를 유니코드로 표현 System.out.println("c1 = " + c1); System.out.println("c2 = " + c2); System.out.println("c3 = " + c3); System.out.println("c4 = " + c4); System.out.println("c5 = " + c5); //3.정수형 System.out.println("====정수형===="); //byte, 크기 : 1byte, 표현범위 : -128 ~ 127 byte b1 = 127; //128에러 //short, 크기 : 2byte, 표현범위 : -32,768 ~ 32,767 short s1 = 32767; //int, 정수표현의 기본 크기 : 4byte int in = 45678; //long, 크기 : 8byte long lg = 2345L; //1이랑 해깔리기 때문에 L 대문자표시 System.out.println("lg = "+ lg); //4. 실수형 System.out.println("====실수형===="); //float, 크기 : 4byte float f1 = 3.245f; //double, 실수표현의 기본, 크기 : 8byte double d1 = 2.56; //5.문자열 표시 (기본자료형이 아닌 참조자료형-레퍼런스형) // 문자열 " " System.out.println("====문자열표시===="); String str = "Hello World!"; System.out.println("str = " + str); } }
출력값
====논리형====
b = true
====문자형====
c1 = A
c2 = A
c3 = A
c4 = 자
c5 = 자
====정수형====
lg = 2345
====실수형====
====문자열표시====
str = Hello World!
+연산자
연산
3+5=8
문자열+문자열 연결
"Hello" + "hi" -> Hellohi
"b= " + true -> b=true
연산시 자료형이 같아야 오류가없음
자료형이다르면 일치해야 하기때문에 형변환 을 통하여 자료형을 통일
int [] - 자동 형뱐환 -> long [[[[[[]]]]]]] : 데이터외곡이생김
long [[[[[[]]]]]]] - 강제 형변환 -> int[] : int에 맞게 강제로 짤라내야한다. - 데이터외곡이생김
<<-----------------------------------------------------------------명시적(강제)형변환 - 데이터손실이 있을수있다. char(2byte) < int(4byte) < long(8byte) < float(4byte) < double(8byte) ------------------------------------------------------------------>>자동적 형변환 - 데이터손실이없다. |
byte short로 연산하면 int로 승격됨
예제
public class CastEx { public static void main(String[] args){ //====프로모션 (자동형변환)====// //더큰 자료형으로 승격이 일어나는 형태, //정보의 손실이 전혀 없으며 자동적으로 발생 byte b1 = 127; byte b2 = 127; int b3 = b1 + b2; //32bit 미만의 자료형 (byte) 연산시 32bit(int)로 승격 short s1 = 123; short s2 = 123; int s3 = s1 + s2; //32bit 미만의 자료형 (short) 연산시 32bit(int)로 승격 int in1 = 234; long lg = in1; //int->long 자동 형변환 System.out.println("lg = " + lg); int in2 = 1234; long lg2 = 234L; long lg3 = in2+ lg2; //int2 -> long 자동형변환 //====디모션(명시적(강제) 형변환)====// //더 작은 자료형으로 강등, 데이터의 손실이 있을 수 있음 //명시적(강제) 형변환 byte b4 = 127; byte b5 = 127; byte b6 = (byte)(b4 + b5); //int->byte 명시적(강제) 형변환 System.out.println("b6 = " + b6); short s4 = 123; short s5 = 123; short s6 = (short)(s4 + s5);//int->short 명시적(강제) 형변환 int in5 = 234; float f5 = 123.5f; int in6= in5 + (int)f5; //float -> int 손실이 있을수있슴 System.out.println("in6 = " + in6); //(int) = Cast 연산자. } }
출력값
lg = 234
b6 = -2 //명시적(강제) 형변환으로 데이터 손실이 일어남
in6 = 357 // float->int로 명시적(강제) 형변환으로 .5가 날라가버림
-------------------------------------------------------------------------
생략이 가능한건 생략하는게 좋다 = 좋은코드.