주소값을 저장(4byte)
기본형을 제외한 모든 타입
String, System, Date, Calendar
모든 클래스는 자료형이다.
bit
byte - 8bit
kilo byte - 1024byte
mega byte - 1024kb
giga byte - 1024mb
tera byte - 1024gb
peta byte - 1024tb
exa byte
zetta byte
yotta byte
public class PrimitiveTypeTest {
public static void main(String[] args) {
PrimitiveTypeTest p = new PrimitiveTypeTest();
p.test1();
p.test2();
p.test3();
p.test4();
}
public void test4() {
int i = Integer.MAX_VALUE;
System.out.println(i);
i = i + 2;
System.out.println(i);
} // Data Overflow
변수 : 메모리에 값을 담기 위한 물리적인 공간
상수 : 한번 값대입 후에 값을 변경할 수 없는 변수, 가져다 쓰는것만 됨, final
public void test3() {
final int AGE = 20; // 파이널변수명은 대문자로 쓰는 관례가있음
AGE = 30; // AGE가 상수 값을 받았기때문에 값 변경안됨
System.out.println(AGE);
int myAge = AGE + 1;
System.out.println(myAge);
//jdk가 지정해둔 상수
System.out.println(10 * 10 * Math.PI);
//정수형이 가지고 있는 최소값 ~ 최대값
System.out.println(Byte.MIN_VALUE + " ~ " + Byte.MAX_VALUE);
System.out.println(Short.MIN_VALUE + " ~ " + Short.MAX_VALUE);
System.out.println(Integer.MIN_VALUE + " ~ " + Integer.MAX_VALUE);
System.out.println(Long.MIN_VALUE + " ~ " + Long.MAX_VALUE);
}
//초기화
변수 선언과 값대입을 한줄에서 처리
public void test2() {
//int num;
//num = 123;
int num = 123;
System.out.println(num);
double d;
d = 0.1;
//변수는 값대입 없이 사용할 수 없다.
d = d + 1.23;
System.out.println(d);
//같은 타입인 경우, 한줄에 여러개 변수선언, 초기화가 가능하다.
int a, b;
a = 1;
b = 2;
int c = 3, e = 4;
System.out.println(a + "" + b);
//정수연산
int i = 10;
int j = 3;
System.out.println(i + j);
System.out.println(i - j);
System.out.println(i * j);//곱하기
System.out.println(i / j);//나누기 몫만 처리
System.out.println(i % j);//나머지
}
//기본형
1. 논리형
boolean(1byte) : true | false
2. 문자형
char(2byte) 0 ~ 65535 : 'a', '가', '1'
3. 정수형
byte(1byte) -128 ~ 127(256)
short(2byte) -32768 ~ 32767(65536)
int(4byte)(기본형) -2147483648 ~ 2147483647(42억)
long(8byte) -9223372036854775808 ~ 9223372036854775807(1844경)
4. 실수형
float(4byte) 소수점 이하 7자리
double(8byte)(기본형) 소수점 이하 16자리
public void test1() {
//1. 변수 선언
boolean bool;
char ch;
byte b;
short sh;
int i;
long l;
float f;
double d;
//2. 변수에 값대입
bool = true;
bool = false;
bool = (5 > 2); // > < >= <=
bool = (3 == 4);
bool = (3 != 4); // 같지 않으면 true, 같으면 false
bool = !bool; //bool의 값을 반전시킴 true 였으면 false로, false였으면 true로
ch = 'a';
ch = '가';
ch = '韓';
ch = ' ';//공란
//정수 기본형 int : 12343 -> int
b = 120;
//b = 130; // Type mismatch: cannot convert from int to byte
sh = 32000;
i = 100000000;
l = 1_234_567_890_123L; // The literal 1234567890123 of type int is out of range
//정수 기본형은 int, long쓰려면 숫자뒤에 소(대)문자 l을 써줘야한다. l은 1하고 헷갈려서 L쓰는게 좋음
//정수형 long은 1844경이라는 큰 수를 담기때문에 읽기 편하려고 숫자 사이에 _넣어도 코드인식됨
//long l = 1_234_567_891_234_567L;
//실수 기본형 double
f = 0.1234567890F; // Type mismatch: cannot convert from double to float
//실수 기본형은 double, float쓰려면 숫자뒤에 소(대)문자 f를 써줘야한다.
d = 0.12345678901234567890;
//3. 변수 사용(출력)
System.out.println("bool = " + bool);
System.out.println("ch = " + ch);
System.out.println("b = " + b);
System.out.println("sh = " + sh);
System.out.println("i = " + i);
System.out.println("l = " + l);
System.out.println("f = " + d);
System.out.println("d = " + d);
}
}
public class CastingTest {
public static void main(String[] args) {
CastingTest c = new CastingTest();
c.test1();
c.test2();
c.test3();
c.test4();
}
//java.lang.String 문자열 "abc"
- 참조형(객체 만들어 사용)인데
- 기본형처럼 사용가능(리터럴(값)을 대입하는 형태)
- 너무많이써서 객체만들지 않고 값바로 부여해서 사용가능
public void test4() {
String name = "홍길동";
String name2 = new String("홍길동");
//더하기연산 지원(빼기 곱하기 안됨)
System.out.println(name + " 만세!");
//char
System.out.println(name + 'a');
System.out.println(123 + 'a');
System.out.println("abc" + 'z' + 123);
System.out.println(123 + 'z' + "abc");
}
//형변환 유의사항
- byte, short, char타입은 연산시 자동으로 int(정수 기본형)으로 변환되서 처리
public void test3() {
byte b1 = 10;
byte b2 = 20;
byte result = (byte)(b1 + b2);
System.out.println("result = " + result);
boolean bool = 'a' > (b1 + b2);
char > (byte + byte)
char > (int + int)
char > int
int(97) > int(30)
System.out.println("bool = " + bool);
//char변수에 int대입
char ch = 65; // A
System.out.println(ch);
ch = '\ud734'; // '역슬래쉬u' = 유니코드
System.out.println(ch);
}
//명시적 형변환
1. 크기가 작은 타입으로 형변환 - 데이터 손실
2. 크기가 큰타입으로 형변환
public void test2() {
//1.데이터 손실이 있는 경우
int num = (int)3.7; // int = double(double을 int로 넣는거임)
System.out.println(num); //3.7에서 소수점버리고 3이됨
//2.데이터 손실없이 큰 타입으로 변환
int a = 10;
int b = 4;
System.out.println((double)a / b);//(double)int / int
// double / int
// double / double
System.out.println(a * 1.0 / b); //a가 10.0가 되면서 결과값 소수점까지 출력
//2147483647 + 1 = 2147483648
int i = Integer.MAX_VALUE;
System.out.println((long)i + 1);
System.out.println(i + 1L);
}
// 자동형변환
크기가 작은 타입에서 큰 타입으로 변환은 자동으로 처리
정수에서 실수로의 변환은 자동처리
byte(1) -> short(2) -> int(4) -> long(8) -> float(4) -> double(8)
char(2)
public void test1() {
//대입연산
int num = 300;
long INum = num;
System.out.println("INum = " + INum);
int a = 3;// double a = 3.0으로 바뀜
double b = 1.5;
System.out.println(a + b);// int(3) + double
// double(3.0) + double(int가 double로 바뀜)
int c = '0'; // int = char(char가 int로 바뀜)
// int = int
System.out.println(c);
System.out.println('c' + 1); // char('c') + int
// char(99) + int
}
}