JAVA_02_변수, 상수, 리터럴, 오버플로우

charl hi·2021년 8월 5일
0

JAVA

목록 보기
2/53

variable 변수

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

  • 변수의 초기화 : 변수에 처음으로 값을 저장하는 것

final 상수

  • final 키워드를 활용해 상수를 정의하고 사용하기
  • : 한번만 값을 저장 가능한 변수
  • final static

public class Main {

	final static double PI = 3.141592;
	
	public static void main(String[] args) {
		
		int r = 30;
		System.out.println(r * r * PI);

	}

}

literal 리터럴

  • : 그 자체로 값을 의미하는 것
  • 우리가 기존에 알고 있는 상수라고 생각하면 된다.


int a = 10;
int b = 20;
char c = 'a';
final int fi = 500;
String s = "string";

-> 변수 : a, b, c, s
-> 상수 : fi
-> 리터럴 : 10, 20, 'a', 500, "string"


오버플로우

  • : 표현 가능한 범위를 넘는 것
  • ✨최댓값 + 1 -> 최솟값
    ex) 4자리가 최대라 하면
    • 9999(10) -> +1 -> 0000(10)
    • 1111(2) -> +1 -> 0000(2)
  • ✨최솟값 - 1 -> 최댓값
    ex) 4자리가 최대라 하면
    • 0000(10) -> -1 -> 1111(10)
    • 0000(2) -> -1 -> 1111(2)

int

  • -2147483648 ~ 2147483647
  • 최대치에 + 1 하면 최저치가 된다. <- 오버플로

public class Main {

	final static int INT_MAX = 2147483647;
	
	public static void main(String[] args) {
		
		int a = INT_MAX;
		System.out.println(a + 1);

	}

}



부호있는정수와 부호없는정수의 차이

short - 부호있는정수

  • 2의 16승 -> -2의 15승 ~ 2의 15승 -1 -> -32768 ~ 32767

  • 최댓값 32767 + 1 -> -32768

  • 최솟값 -32768 - 1 -> 32767

char - 부호없는정수

  • 2의 16승 -> 0 ~ 2의 16승 -1 -> 0 ~ 65535

  • 최댓값 65535 + 1 -> 0

  • 최솟값 0 - 1 -> 65535



산술변환

  • : 연산 전에 피연산자의 타입을 일치시키는 것
  • 1) 두 피연산자의 타입을 같게 만든다. (보다 큰 타입으로)
long + int -> long + long -> long
8, 4
  • 2) 피연산자의 타입이 int보다 작으면 int로 변환된다.
byte + short -> int + int -> int
char + short -> int + int -> int
  • 문자 -> 숫자 : '문자' - '0' 방식인 것도 2)의 이유다.

  • 오버플로우를 방지한다.


public class Ex3_9 {

	public static void main(String[] args) {
		int a = 1_000_000;	//10의 6제곱
		int b = 2_000_000;	//10의 6제곱*2
		
		long c = a * b;		//10의 12제곱	> int의 범위 10의 9제곱이므로
		System.out.println(c);	//오버플로우!!
		
		long d = (long)a * b;
		//둘 중 하나만 형변환만 해주면 나머지도 알아서 형변환 되므로
		System.out.println(d);
	}

}

-1454759936
2000000000000



Ref

0개의 댓글

관련 채용 정보