常数活用例題 : 半円が10である円の円弧求める問題
final double PI = 3.14; // Math.PI로 이미 상수가 구현되어있다. double RADIUS = 10; double value = PI * (RADIUS * RADIUS); System.out.println(value); System.out.println(Math.PI * RADIUS * RADIUS);
int num = 10; System.out.println(num);
num = 20; System.out.println(num);
final int MAX_SIZE = 100; final char CONST_CHAR = '상'; final int CONST_ASSIGNED;
MAX_SIZE = 20; は、エラーを発する。
finalにより常数として宣言されたため、
初回のみ初期化されるからだ。
int num1 = 5+7
演算されるためにはメモリに乗せられるプロセスを経る必要がある。
その際、変数名のない5と7は基本的に常数としてメモリに割り当てられる。
double num2 = 3.3+4.5
実数の場合にも同じである。各変数ごとに名の持たない「間」が作られ、
算がなされた後 num2 という名の空き間に結果が入れられる。
System.out.println(3147483647 + 3147483648);
コンパイルの時、Integer number too large というエラーを表示する。
System.out.println(3147483647L + 3147483648L);
基本、Intとして作成されるため、範囲超える超える数値には
l、又はLを付けることでlong型常数として表示する識別が必要だ。
その他、d/D, f/F , 0b/0B などのバリエーションがある。
System.out.println("AB" + '\t' + "c"); System.out.println("AB" + '\n' + "c");
/t はタブ, /n は改行である。
int num1 = 50; long num2 = 3147483647L; System.out.println(num1+num2);
演算のとき、long型へと自動的に型が変わる。
2進数の場合、桁数が異なると算が出来ないためである。
0000 0010 0010 0000 0010 >>???????? ^^^^ ここを消せるわけでもない
int < long < loat < double
char ch = 'A'; short sh = 100; int result = ch + sh; System.out.println(result); //165~~~
char変数 ch は二進法で表示すると65である。
従って、intとして算するとき、165という結果を出す。
char sh11 = 'A'; short sh22 = 1; char sh33 = (char) (sh11 + sh22); System.out.println(sh33); //B
逆に、この場合は二進数で66の識別子を持つBが出される
int a = 3; int b = 4; double c = a/b; System.out.println(c); //0.0이 나온다 왜 0.75 가 안나올까?
定数と実数を算する結果は必ず定数である。
小数点以下は捨てる。
int a = 3; int b = 4; double c = (float)a/b; //0.75 System.out.println(c);
double c = a/(double)b;//0.75
double c = (double)(a/b);//0.0 ??
括弧の内側から算されるからだ。
short num = 10 ; num = (short) (num + 77L); int rate = 3; rate = (int) (rate * 3.5); System.out.println(num); System.out.println(rate); - num = 10; num += 77L; rate =3; rate *= 3.5; System.out.println(num); System.out.println(rate);
上と下の演算結果は同じだ
- +=
- -=
- /=
- %=
これらは各演算の後、左項目に結果を入れる。
상수 활용 예제 : 반지름이 10인 원의 지름을 구하는 문제
final double PI = 3.14; // Math.PI로 이미 상수가 구현되어있다. double RADIUS = 10; double value = PI * (RADIUS * RADIUS); System.out.println(value); System.out.println(Math.PI * RADIUS * RADIUS);
int num = 10; System.out.println(num);
num = 20; System.out.println(num);
final int MAX_SIZE = 100; final char CONST_CHAR = '상'; final int CONST_ASSIGNED;
MAX_SIZE = 20; 은 오류가 난다
왜냐하면 MAX_SIZE 는 final로 인해 상수로 선언되서
한번만 변수를 초기화하기 때문이다.
int num1 = 5+7
연산이 되기위해서는 메모리에 담기는 과정을 거쳐야한다.
그때, 변수명이 없는 5 와 7 은 기본적으로 int, 상수 로서 메모리에 할당된다.
double num2 = 3.3+4.5
실수의 경우도 같다. 각각 이름없는 방이 생기고,
연산 후에 num2 라는 빈 방에 결과가 들어간다.
System.out.println(3147483647 + 3147483648);
컴파일시 Integer number too large 라는 오류 메시지를 전달한다.
System.out.println(3147483647L + 3147483648L);
l 또는 L을 붙여서 long형 상수로 표현해 달라는 요청을 해야 한다.
그 외에 d/D, f/F , 0b/0B 를 붙여 float형, 이진수로 명시할수있다.
기본형은 더블이다
System.out.println("AB" + '\t' + "c"); System.out.println("AB" + '\n' + "c"); ~~
/t은 탭, /n은 개항-줄바꿈 이다.
int num1 = 50; long num2 = 3147483647L; System.out.println(num1+num2);
연산시 long로 자동 형변환이 이루어진다.
2진수의 경우 자릿수가 다르면 정상적인 연산이 불가능하기때문
0000 0010 0010 0000 0010 >>???????? ^^^^ 이부분을 지울수도 없다
int < long < loat < double
char ch = 'A'; short sh = 100; int result = ch + sh; System.out.println(result); //165~~~
char 은 이진수료 표현시 65 이다.
따라서 int 로 계산될때 165 라는 결과가 나온다.
char sh11 = 'A'; short sh22 = 1; char sh33 = (char) (sh11 + sh22); System.out.println(sh33); //B
반대로 이경우에는 이진수로 66인 값을 가지는 B 가 출력된다
int a = 3; int b = 4; double c = a/b; System.out.println(c); //0.0이 나온다 왜 0.75 가 안나올까?
정수와 정수를 연산한 결과는 반드시 정수다
따라서 소수점 이하값은 버려진다.
int a = 3; int b = 4; double c = (float)a/b; //0.75 System.out.println(c);
double c = (double)(a/b);//0.0 ??
괄호 안 연산이 먼저 이뤄지기때문
short num = 10 ; num = (short) (num + 77L); int rate = 3; rate = (int) (rate * 3.5); System.out.println(num); System.out.println(rate); - num = 10; num += 77L; rate =3; rate *= 3.5; System.out.println(num); System.out.println(rate);
위, 아래의 결과는 같다.
- +=
- -=
- /=
- %=
위는 각 연산을 마친 후 좌항에 결과를 대입한다.