연산자는 덧셈뺄셈곱하기나누기 간단한 것이므로 스킵
하나의 값을 저장할 수 있는 메모리 공간
일반적으로 메로리 공간에 값을 넣을때 각 값을 넣는 메모리 주소가 있다. 그 메모리 주소를 편하게 보기 위해 대신해주는 것이 변수이다. 변수는 하나의 값만 저장할 수 있기 때문에 새로운 값이 들어오면 이전값은 지워진다.
클래스 변수, 인스턴스 변수, 지역변수 - 6장
지역 변수는 읽기전에 꼭 초기화해야 함.
public class Ex02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int x = 2, y = 4;
System.out.println(x+y);
System.out.println(x*y);
System.out.println(x/y);
System.out.println(x-y);
}
}
----------------------------------------------
결과
6
8
0
-2
8개(기본형)
문자 - char
숫자 - 정수 - byte, short, int, long
숫자 - 실수 - float, double
논리 - boolean(true, false)
실제 값을 저장
나머지 (참조형)
String, System 등
메모리 주소를 저장(4byte 또는 8byte)
32bit JVM - 4byte (40억 byte)
64bit JVM - 8byte (1600만경 byte)
Date today; // 참조형 변수 today를 선언
today = new Date(); // today에 객체의 주소를 저장
객체생성
변수 - 하나의 값을 저장하기 위한 공간(변경 O)
상수 - 한 번만 값을저장 가능한 변수(변경 X)
리터럴 - 그 자체로 값을 의미하는것(기존의 상수 그자체)
int score = 100;
score = 200;
final int MAX = 100; // MAX는 상수
MAX = 200; // Error
char ch = 'A';
String str = "abc";
위 줄부터 100, 200, 100, 200, 'A', "abc" 는 리터럴
score, ch, str 는 변수
MAX 는 상수
상수는 변경할 수 없기 때문에 에러가 발생한 것을 확인할 수 있다.
boolean power = true;
char ch = 'A';
String str = "ABC";
byte b = 127;
byte b = 128; // 에러 byte -> -128 ~ 127
int i = 100; // 10진수
int oct = 0100; // 8진수
int hex = 0x100; // 16진수
long l = 10_000_000_000L; // 접미사에 L을 붙이면 롱타입을 무조건 넣어야한다.
참고로 위의 숫자 사이에 _ 이거는 jdk1.7버전 부터 나온 기능으로 숫자를 알아보기 쉽게하기위해 넣는것이다.
long l = 100; // OK
float f = 3.14f;
double d = 3.14d; // d는 생략가능 f는 생략불가
10. -> 10.0 && 접미사가 없으니 d가 생략되었다고 볼수 있다. 그러므로 double 타입
.10 -> 0.10 && 마찬가지 double 타입
10f -> 10.0f
1e3 -> 1000.0 // e -> 10^n e는 실수형 리터럴 && 접미사가 없으니 double
변수 > 리터럴 인 경우 OK
물건보다 물건을 담을 그릇이 더 크면 상관없다.
int i = 'A'; // int > char
long l = 123; // long > int
double d = 3.14f; // double > float
변수 < 리터럴 인 경우 에러
int i = 30_0000_0000; // int의 범위(20억)벗어남
long l = 3.14f; // long < float
float f = 3.14; // float < double
String s1 = "AB";
String s2 = new String("AB");
String은 클래스이다. 원래는 클래스를 선언할때 아래처럼 선언해야하지만, 문자열은 워낙 자주 쓰기 때문에 string은 위처럼 선언이 가능하다.
String s = "A";
String s = ""; // 빈 문자열
char ch = ''; // 에러
String s1 = "A" + "B" // "AB"
"" + 7 -> "" + "7" -> "7" // 숫자 -> 문자열
"" + 7 + 7 -> "7" + 7 -> "7" + "7" -> "77"
7 + 7 + "" -> 14 + "" -> "14" + "" -> "14"
문자열 + any type -> 문자열
any type + 문자열 -> 문자열
두 변수의 값 교환하기 (스위칭은 이미 알고있는 내용이므로 넘어감)
기본형
byte b;
b = 3;
3 -> 00000011
1byte = 8bit;
1bit -> 2진수 한 자리(0, 1)
컴퓨터는 0과 1밖에 모르기 때문에 2진법으로 변화되어 저장된다.
n비트로 표현할 수 있는 값의 개수 : 2^n개
부호없는 정수의 범위 : 0 ~ 2^n - 1 -> 0 ~ 255
부호있는 정수의 범위 : -2^(n - 1) ~ 2^(n - 1) -1 -> -128 ~ 127
S : 부호비트 (Sign bit)
S = 0 // 양수 7bit = 128개 (0 ~ 127)
S = 1 // 음수 7bit = 128개 (-1 ~ -128)
float, double 타입은 오차가 발생할 수 있기 때문에 정밀도라는 것이 있다. float은 7자리, double은 15자리 까지 오차없이 표현할 수 있다. 그래서 double타입이 더 정교하기 때문에 default값으로 저장이 되어있다.