2장 연산자, 변수, 상수, 리터널

slee2·2021년 9월 3일
0

Java의 정석

목록 보기
2/28
post-thumbnail
post-custom-banner

연산자는 덧셈뺄셈곱하기나누기 간단한 것이므로 스킵

변수란

하나의 값을 저장할 수 있는 메모리 공간

일반적으로 메로리 공간에 값을 넣을때 각 값을 넣는 메모리 주소가 있다. 그 메모리 주소를 편하게 보기 위해 대신해주는 것이 변수이다. 변수는 하나의 값만 저장할 수 있기 때문에 새로운 값이 들어오면 이전값은 지워진다.

등호(=)는 같다로 쓰는것이 아니라 왼쪽값에 오른쪽값을 넣는것.

클래스 변수, 인스턴스 변수, 지역변수 - 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 (40byte)
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값으로 저장이 되어있다.

post-custom-banner

0개의 댓글