JAVA

JAVA 데이터 타입

짱코딩러 2022. 7. 6. 14:43

기본형 타입(Primitive type)

크기(byte) 1 2 4 8
정수형 boolean      
문자형   char    
정수형 byte short int (default) long
실수형     float double (default)

boolean: 1비트, true 또는 false

char: 2바이트, Unicode

byte: 1바이트, -128~127

short: 2바이트, -32768~32767

int: 4바이트, -2^31~3^31-1(-20억~20억)

long: 8바이트, -2^63~2^63-1(-800경~800경)

float: 4바이트, -3.4E38~3.4E38

double: 8바이트, -1.7E308~17E308

 

+10의 지수를 나타내는 E 또는 e가 붙으면 실수값

 

 

예시

public class TypeTest {
	public static void main(String[] args) {
//		######boolean 타입
		boolean b1 = true;
		System.out.println("b1의 값은 :" + b1);
		System.out.println("b1의 값은 :" + !b1); //!b1을 적어줬다고 b1이 계속 false인건 아님.
		b1 = !b1;  // 변수값이 계속 false이길 바라면 아예 값을 넣어줘야 합니다.
		System.out.println("b1의 값은 :" + b1);
//		int 1 = b1;  ->err  boolean타입은 형변환이 안 됨.
		byte by =127;  //byte = 1byte = 정수형
//		by = by + 1;   ->err  그냥 이렇게 쓰면 1을 int로 인식함.
//						변수가 byte 타입이라 int를 넣으면 크기가 안맞어~~
		by++;  // by = by + 1 증감 연산자로 증가시켜주시면 댐니당
		System.out.println(by);
//		 -> -128로 출력됨. 왜??! byte 범위(-128~-127)를 벗어나면 다시 첨으루 돌아감 (순환)
		by = -128;
		by--;
		System.out.println(by);
//		 -> 127로 출력됨. -128이랑 127이 연결되어 있다고 볼 수 있다.
		
//		######char 타입
		char c1 = 'A';
		System.out.println(c1);
		char c2 = 65;  //A의 10진 (아스키코드)
		System.out.println(c2);
		char c3 = '\u0041';  //A의 16진 u니코드값
		System.out.println(c3);
//		char 타입은 엄밀히 따지면 정수타입!
//		왜냐, 유니코드 값(아스키코드)을 알아듣자너? 즉, 정수형이랑 호환이 된다~
		System.out.println(c1 + '\t' +c2);
//		 -> 65 + 9 + 65   \t(tab)가 아스키코드에서 9임.ㅡㅡ;   \n = 10
//		**작은따옴표 지켜주기! 큰따옴표는 문자열~
		
		String s1 = "hello";
		System.out.println(s1 + '\n' +c2);
//		만약 하나라도 문자열(String)이라면..?  \n이 줄바꿈 역할을 하게 됨.
		
//		######short 타입
		short sh1 = 32767; // 2byte  -32768~32767  C언어 호환용.
		sh1++;
		System.out.println(sh1);
//		  -> -32768 출력됨.
		
//		######int 타입
		int i1 = 100;
		byte v1 = 10;
		byte v2 = 20;
//		v1 = v1 + v2; ->err  같은 byte타입이라도, 연산하는 순간 int(디폴트)가 됨.
//						같은 정수타입이래도 타입 맞춰줘야돼요~
		v1 = (byte)(v1 + v2);
		long l1 = 128;  //여기서 128이 int인건 맞는데 long의 그릇이 더 크기 때문에 문제없음.
		
//		######long 타입
		long l2 = 9_223_372_036_854_775_807L; //int값(32bit=2^31 -1)을 넘으면 항상 L표시.
		long l3 = 2_147_483_648L;
		int i2 = 2_147_483_647;
		System.out.println("int 최대값 " + i2);
		System.out.println("long 최대값 " + l3);

	}

}
public class TypeTest2 {

	public static void main(String[] args) {
//		######float 타입  float(4byte), double(8byte) 정밀한 값을 쓸 때 사용함니다 
		float f1 = (float)3.14;  //(float)이렇게 표시해줘도 되지만
		float f2 = 3.14f;    //보통 뒤에 f를 붙여 표시해요
		f2 = f1 + f2;  //얘는 byte때랑 다르게 잘 됨.
		System.out.println(f1);
		
//		######double 타입
		double d1 = 1.5;
		System.out.println(d1 + f2);  // ->7.7800002~~ 출력값 옘병남
//		  ->float과 double은 지수부와 가수부에 배정된 메모리 사이즈가 다른데, 
//		    컴터는 소수점 자리를 맞춰서 계산할 줄 모르기 때문에
//		    난리가 난거임~ 그니까 혼용해서 쓰면 정확한 값을 얻을 수 없어요
		f1 = 3.1415926535897932846f;
		d1 = 3.1415926535897932846;  //뒤에 암것두 안붙이면 double
		System.out.println(f1);  //가수부가 짤림
		System.out.println(d1);
		System.out.println(3.14/0); // ->Infinity(무한루프)
		System.out.println(0/0.0);  // ->NaN(Not A Number)
//		0으로 나눌때는 예외처리로 소스에 제한을 두는게 좋음.

	}

}
public class TypeTest3 {

	public static void main(String[] args) {
//		######String
		String toolName = "JDK";  //1.문자형 리터럴로 어사인해서 만들 수 있음. ->상수영역에 들어감.
		String toolName2 = "JDK";
		String toolName3 = "JDK";
		String toolName4 = "JDK";
		String toolName5 = "JDK";  //상수 영역에 있는 애를 여러개 만들면 메모리가 낭비됨.
//		하지만 문자열 자체로 어사인해서 문자열 객체를 만들면 상수영역에서 관리가 되기 때문에
//		중복해서 적은 경우 하나만 올려놓고 기존에 있는 객체가 재활용됨.
//		5개가 1개의 객체를 가리키는 셈.
		
		String s1 = new String("JDK"); //2.정석대로 생성자를 이용해 만들 수 있음.
		
		System.out.println(toolName);  // ->toolName
//		(Hello2030 -10)주소가 찍히지 않는 이유! toString메소드(객체의 정보를 리턴해줌)를 찍어주기 때문에(디폴트 패키지라 그냥 됨)
		System.out.println(toolName + 1.8); // ->JDK1.8
//		문자열과 어떤 값을 연산하면 그 값도 문자열로 연산 됨.
		System.out.println("(" + 3 + "," + 5 + ")");  // ->(3,5)
//		문자열로 시작했으니까 나머지도 싹 문자열로 출력됨
		
		int i = 0;  //변수는 쓰기 전에 항상 초기화~!
		System.out.println(i);
		
		String s2 = " "; //얘도 값 넣어줘야돼연
		System.out.println(s2); // 공백(0)이 출력됨.
		

	}

}

 

참조형 타입(Reference type)

String: 문자열. 자바에서 제공하는 클래스(java.lang패키지)

Array

Enumeration

Interface

 

 

+기본값

Data Type

Default Value (for fields)

byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
String (or any object)   null
boolean false