
變數(Variable)는 變하는 數로 프로그램 中에 값이 繼續 바뀔 수 있는 數인 反面에 常數(Constant)는 한 番 割當된 값이 變하지 않는 數를 말한다。
特히 final double PI = 3.141592 처럼 이미 만들어진(定해진) 값이 있어서 누군가 中間에 값을 變更시키면 안 되는 것들에 必히 常數를 使用해야한다。
常數名은 全部 大文字로 作成한다。
2個以上의 單語로 作成 時에는 언더바(_)로 連結한다。(Snake表記法)
常數例示01 : 常數名과 初期化
public class Constants {
public static void main(String[] args) {
final int MAX_SIZE = 100;
final char CONST_CHAR = '상';
final int CONST_ASSIGNED;
CONST_ASSIGNED = 12; // 割當하지 않았던 常數의 값 割當
System.out.println("常數1 : " + MAX_SIZE);
System.out.println("常數2 : " + CONST_CHAR);
System.out.println("常數3 : " + CONST_ASSIGNED);
}
}
public class Circle {
public static void main(String[] args) {
// 半지름이 10인 圓의 넓이를 求하는 프로그램을 짜시오。
double radius = 10.0;
double result = radius * radius * Math.PI;
System.out.println("圓의 넓이는 " + result);
}
}
變數의 初期化의 意味는 該當變數에 처음으로 값을 넣는 것이다。
變數의 境遇에는 初期化 以後에 값을 넣어 變化시킬 수 있으나、常數는 初期化 以後 값을 넣거나 變更시킬 수 없다。
// 變數의 宣言과 初期化 例示
int a = 1; // 變數의 宣言과 同時에 初期化
char ch = 'a'; // 變數의 宣言과 同時에 初期化
int b; // 變數의 宣言
b = 5; // 初期化
// 常數의 宣言과 初期化 例示
final int MAX_SIZE = 100; // 常數 宣言과 同時에 初期化
final char CONST_CHAR = '상'; // 常數의 宣言과 同時에 初期化
final int CONST_ASSIGNED; // 常數의 宣言
CONST_ASSIGNED = 12; // 常數의 初期化
CONST_ASSIGNED = 30; // 誤謬。常數는 한 番만 값을 割當할 수 있다。
리터럴(Literals)은 資料型을 基盤으로 表現이 되는 常數를 意味한다。
int num = 5 + 7; // 5와 7은「整數型 리터럴」
double num2 = 3.3 + 4.5; // -3.5 4.5는「實數型 리터럴」
char ch = 'A' // A는「文字型 리터럴」
위에서 5나 7、3.3、4.5 全部 演算을 爲해서 CPU로 보내기 爲해 메모리에 올리는 過程이 同伴된다。그렇기 때문에 5와 7은 int型으로 4byte의 메모리空間을 割當받게 되고、3.3과 4.5는 double型으로 8byte의 메모리空間을 割當받게 된다。이렇게 메모리空間을 確保한 整數와 實數 모두는 메모리空間에 값이 記錄되면 값이 變하지 않기 때문에 리터럴이라고 表現한다。
(리터럴이라는 表現은 常數라는 表現으로 代身하는 境遇가 많다。)
// long型 - L을 써야함
long l = 3147483647L;
sysotu(3147483647 + 3147483647);
// → integer number too large 誤謬메세지 出力
// 二進數로 넣으려면 -OB또는 ob를 붙여서 二進數 表現
byte seven = 0B111; // 十進數로 7
int num205 = 0B11001101;
// 願하는 位置에 언더바를 넣을 수 있다。
// 언더바는 可讀性을 爲해 넣어주는 것일 뿐、아무 影響이 없다。
int num = 100_000_000;
int num = 12_34_56_78_90;
System.out.println(3.0004999 + 2.0004999);
System.out.println(3.0004999D + 2.0004999d);
/*
實數는 基本 double型이다。double임을 明示하기 爲해「d」또는「D」를 揷入
(안 넣어도 된다。)
*/
System.out.println(3.0004999F + 2.0004999f);
// 實數型 常數를 float型으로 表現하려면「f」나「F」揷入 (必히!)
public class Boolean {
public static void main(String[] args) {
boolean b1 = true;
boolean b2 = false;
System.out.println(b1); // b1이 지닌 값 出力
System.out.println(b2);
int num1 = 10;
int num2 = 20;
System.out.println(num1 < num2);
System.out.println(num1 > num2);
}
}
出力畫面 →
true
false
true
false
true / false → 부울型常數 (Boolean)
'한' '글' 'A' → 文字型常數
System.out.println(3147483647 + 3147483648); // 誤謬가 난다。
// 修正方法
System.out.println(3147483647L + 3147483648L);
整數 리터럴은(3147483647 : 이것도 리터럴) 基本的으로 4byte로 잡는다。(int型)
여기서는 이미 演算 前의 整數 리터럴이 int의 範圍를 넘었다。
리터럴常數에서 數字 뒤에 L(小文字l도 相關없음)붙이면 long型(8byte)으로 認識해서 long型 常數로 表現해 달라고 要請하는 것이다。
資料型變換의 意味와 必要한 理由는 基本的으로 演算시킬 때 두 데이터타입이 一致해야하기 때문이다。(必히 같아야 한다。맞춰야 한다。)
型變換은 (資料型크기x 範圍o) 크고 / 小數點을 保存하는 方向으로 이루어진다。
int num1 = 50;
long num2 = 3147483647L // 21億超過
System.out.println(num1 + num2); // num1에 貯藏된 값이 long型으로 變換된다。(自動型變換)
두 被演算子 資料型이 一致하지 않을 때 型變換으로 一致시켜야 한다。自動으로 誤謬없이 컴파일된다면 어느 한 쪽으로 自動型變換이 일어난 것이다。整數와 整數의 演算에서는 데이터타입이 큰 쪽으로 맞춘다。(int보다 작은 데이터타입은 다 int로 變換해준다。)
強制型變換을 하게 될 境遇에는 값을 자른다。자를 때는 앞 部分을 削除하고 뒤에 있는 바이트가 使用된다。

自動型變換은 資料型의 크기가 一致하지 않지만 強制로 變換하지 않아도 默示的으로 型變換이 되는 것을 말한다。自動型變換은 작은 데이터타입이 큰 쪽으로 變更되거나、整數型이 實數型으로 變하는 것만 可能하다。
規則
1) 資料型 크기가 큰 方向으로 型變換이 일어남
2) 資料型 크기에 相關없이 整數資料型보다 實數資料型 優先(小數點保存)
3) 元來의 값을 最大限 保存하는 쪽으로 型變換한다。
long num1 = 3; // 4byte
float num2 = 22.1f; // 8byte
System.out.println(num1 + num2);
위와 같은 境遇에는 float型으로 自動型變換이 일어난다。
理由
1) float이 적은 메모리에 더 많은 數를 表現 可能(範圍가 더 넓다。)
2) 小數點을 保存하기 爲해서
自動型變換 規則에 附合하지 않지만 型變換이 必要한 狀況이라면 明示的으로 型變換을 進行한다。
이 境遇는 데이터가 큰 타입을 작은 타입으로 型變換을 하는 것도 可能하지만、實際 데이터의 變形이 일어날 수 있기 때문에 注意해야한다。
// 明示的型變換 例示
double pi = 3.12425;
int wholeNumber = (int)pi; // 整數型小數點을 버리고 結果값은 3이다。
short num1 = 1;
short num2 = 3;
short num3 = (short)(num1 + num2);
// num1과 num2가 int로 計算될건데 short로 強制型變換
int num4 = (int)num1;
int a = 3;
int b = 4;
double c = a / b;
System.out.println(result);
出力畫面 →
0.0
int 演算結果는 int인데(小數點 날림) 그 값을 num3으로 代入하면서 double型으로 代入해서 .0이 붙게 된다。
願하는 結果값인 0.75를 얻기 爲해서는 num1、num2의 資料型 中 하나는 double로 宣言해야한다。
int a = 3;
int b = 4;
double result = a / (double) b
System.out.println(result);
或은 演算前에 하나를 double型으로 明視的으로 바꿔주면 제대로 된 값을 받을 수 있다。
int a = 3;
double b = 4.0;
double result = a / b;
System.out.println(num3);
위에 둘 中 하나의 資料型만 double로 變換해줘도 된다。
演算時에 數字가 나온다면 型을 따로 쓰지 않고 3.0같은 小數點이 있는 數를 使用하면 自動으로 double로 認識해서 計算된다。