アカデミー5日目-Java
2021.04.02
データ型キャッシュ
byte -> int
byte -> long
short -> int
short -> long
int -> long
byte b1 = 10;
short s1;
//short = byte; 대입
//2byte = 1byte
//양쪽에 자료형이 동일하지 않은데 에러가 나지 않는이유?
//개발자가 모르게 형변환이 발생한다 > 암시적인 형변환, 자동 형변환
//s1 = b1; // 권장 -> 익숙함
//() : 형변환 연산자
//컴파일러가 컴파일을 할 때 윗줄을 현재줄과 같이 번역한다.
s1 = (short)b1; // 권장 -> 가독성 향상
System.out.println("복사본 : "+ s1);
b1 = Byte.MIN_VALUE;
s1 = b1;
System.out.println("복사본: "+ s1); //최소값
b1 = Byte.MAX_VALUE;
s1 = b1;
System.out.println("복사본: "+ s1); //최대값
long l1;
//long = byte
//4byte = 1byte
//***암시적 형변환 발생
l1 = b1;
l1 = (long)b1;
System.out.println("복사본 :" + l1);
明示的変換、強制型変換コンパイル:実際のプログラムを実行せず、言語翻訳のみを行います.ただし、その座標で文法が有効かどうかをチェックします.
short s2 = 10;
byte b2;
//Type mismatch: cannot convert from short to byte
//b2 = s2;<- 컴파일 에러
b2 = (byte)s2;
System.out.println("복사본: " + b2);
s2 = 127;
b2 = (byte)s2;
System.out.println("복사본: " + b2);
//byte의 범위를 벗어나는 값을 대입 -> 값 손실이 일어남. -> 값이 불완전
s2 = 128;
//b2 = 128; <- 컴파일 에러
b2 = (byte)s2;
System.out.println("복사본: " + b2); //-128
s2 = 1000;
b2 = (byte)s2;
System.out.println("복사본: " + b2); //-24
s2 = 10000;
b2 = (byte)s2;
System.out.println("복사본: " + b2); //16
整理する暗黙的変換
明示的な変換
//은행 계좌 : 20억
int m1 = 2000000000;
//이체
short m2;
//사전체크 꼭 할 것!!!
m2 = (short)m1;
System.out.println("계좌잔고 : "+ m2);
実数型変換
float f1 = 3.14F;
double d1;
//암시적 형변환
//8byte = 4byte
System.out.println(d1); // 복사본
float f2;
double d2 = 3.14;
//명시적 형변환
//4byte = 8byte
f2 = (float)d2;
System.out.println(f2);
//정수형 : byte, short, int, long -> int, long 사용
//실수형 : float , double -> double 사용(정밀도 때문)
//정수형 모든 상수는 무조건 int다.
//100L -> long
byte n1 = 100; //byte = int
//byte n1 = (byte)100; -> 명시적 형변환 안적어도 되는 이유? 예외로 해줌
short n2 = 100; //short = int // 명시적 형변환 예외해줌,,
int n3 = 100; //int = int
long n4 = 100; //long = int
//암시적 형변환
int a1;
float a2;
a1 = 100;
//float = int
//4byte = 4byte
a2 = a1;
System.out.println(a2);
//명시적 형변환
int a3;
float a4;
a4 = 100F;
//int = float
//4byte = 4byte
//int(+- 21억) = float(+- 무한대)
a3 = (int)a4;
System.out.println(a3);
a4 = 3.14F;
a3 = (int)a4;
System.out.println(a3); //3.14 -> 3 일부러 값을 버림
long a5;
float a6;
a5 = 10000000;
//float = long
//4byte = 8byte
//무한대 = +-922경
a6 = a5;
System.out.println(a6);
byte(1) < short(2) < int(4) < long(8) <<<<< float(4) < double(8)
フォント変換
//char = short
char c5;
short s5;
s5 = 97;
System.out.println(s5);
c5 = (char)s5;
System.out.println("c5");
//short = char
char c6;
short s6;
c6 = 'A';
s6 = (short)c6;
System.out.println(s6);
//char <-> int
System.out.println((int)'A');
System.out.println((int)'가');
System.out.println((short)'가'); //오버플로우 발생...!!!
分割演算子
System.out.println(a/b); //3 -> 몫 -> 정수 / 정수(소수 이하는 출력 x)
System.out.println(10.0/3.0); // -> 실수 / 실수
分割演算子整数/整数=整数
整数/実数=実数
実数/整数=実数
実数
System.out.println(10 / 3); //3
System.out.println(10 / 3.0); //3.3333333333333335
System.out.println(10.0 / 3); //3.3333333333333335
System.out.println(10.0 / 3.0); //3.3333333333333335
System.out.println(a / (double)b); //3.3333333333333335
System.out.println((double)a / b); //3.3333333333333335
すべての算術演算の結果は、常にデータ型が2つの被演算者のうちより大きなデータ型を返す.
+(プラス):オーバーフローに注意(オーバーフローを感じたら、もっと大きな資料型に変換)
-(マイナス):オーバーフローに注意
*(乗算):オーバーフローに注意
/(分割):オーバーフローがx発生し、小数点以下を保持するかどうかを決定します.
%(残り):神経x
System.out.println(10 / 3); // int / int = int
System.out.println(10 / 3.0); //int / double = double
System.out.println(10.0 / 3); //double / int = double
System.out.println(10.0 / 3.0); // double / double = double
int money1 = 2000000000;
int money2 = 1500000000;
//int + int = int ---> 오버플로우 발생. ----> 논리적 오류
System.out.println("잔액 : " + (money1 + money2)); //잔액 : -794967296
System.out.println("잔액 : " + (money1 + (long)money2)); //int + long = long (형변환)
比較演算子
a = 10;
b = 5;
System.out.println(a > b);
System.out.println(a >= b);
System.out.println(a < b);
System.out.println(a <= b);
System.out.println(a == b);
System.out.println(a != b);
//요구사항) num이 양수입니까?
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("숫자 입력: ");
int num = Integer.parseInt(reader.readLine());
System.out.println("결과 : " + (num > 0));
String str1 = "홍길동";
String str2 = "홍길동";
String str3 = "아무개";
String str4 = "홍";
str4 = str4 + "길동";
System.out.println(str4);
System.out.println(str1 == str2);
System.out.println(str1 == str3);
System.out.println(str1 == str4);
System.out.println("-------equals()--------");
//문자열비교는 equals()메소드를 사용해야함..!!!!!!!!
System.out.println(str1.equals(str2)); //str1 == str2
System.out.println(str1.equals(str4)); //str1 == str4 //true
論理演算子
boolean b1 = true;
boolean b2 = false;
boolean b3 = true;
boolean b4 = false;
System.out.println(b1 && b2); //true && false = false
System.out.println(b1 && b3); // true && true = true
System.out.println(b2 && b4); //false && false = false
System.out.println(b1 || b2); //true || false = true
System.out.println(b1 || b3); //true || true = true
System.out.println(b2 || b4); //false || false = false
//소개팅) 긴머리, 서울
String address = "서울";
String hair = "긴머리";
System.out.println(address.equals("서울") && hair.equals("긴머리"));
System.out.println(address.equals("서울") || hair.equals("긴머리"));
//1항 연산자 : 피연산자가 1개
System.out.println(!true);
System.out.println(!false);
boolean flag = true;
System.out.println(!flag);
代入演算子
int n = 10;
n = n + 1; //누적
System.out.println(n); //11
n += 1; //n = n + 1
System.out.println(n);
n = n + 5;
System.out.println(n);
n+=5;
System.out.println(n);
n +=123;
System.out.println(n);
n = 10;
n = n - 1;
n -=1;
System.out.println(n);
n = 10;
n = n * 2;
n *= 2;
System.out.println(n);
n = 10;
n = n / 2;
n /= 2;
System.out.println(n);
n = 10;
n = n % 3;
n %= 3;
System.out.println(n);
n = 10;
//-=, /=, %= 은 피연산자의 위치를 주의!!!!!
n = 20 - n;
n -= 20;// n = n-20
増減演算子
n = 10;
n = n + 1; //11
n +=1; //12
++n; //13
n++;
System.out.println(n);
n = n - 1;
n -= 1;
--n;
n--;
System.out.println(n);
演算子の優先順位
boolean result = 10 > 5 + 1 && 8 < 2 * 3;
//순서 어려우면 ()괄호쳐서 가독성 높이기
//boolean result = (10 > (5 + 1)) && (8 < (2 * 3));
//연산순서
//boolean result = 10 > 6 && 8 < 6;
//boolean result = true && false;
//boolean result = false;
int num = 10;
int sum = 0;
sum = 20 + ++num; //sum = 20 + 11; -> 31
System.out.println(sum); //31
num = 10;
sum = 0;
sum = 20 + num++; // ((sum = (20+num))++)
System.out.println(sum); //30
System.out.println(num); //11
//증감연산자는 다른 연산자와 같은 문장에 작성하지 말 것!!!!!!!
num = 10;
sum = 0;
//sum = 20 + ++num;
++num;
sum = 20 + num;
System.out.println(sum);
System.out.println(num);
num = 10;
sum = 0;
//sum = 20 + num++;
sum = 20 + num;
num++;
System.out.println(sum);
System.out.println(num);
//?
int o = 10;
System.out.println(--o-o--);
条件演算子
System.out.println(1 + 2);
System.out.println(true ? "참" : "거짓");
System.out.println(false ? "참" : "거짓");
//사이트) 회원가입 -> 19세 이상 ~ 60세 미만
// - 입력하신 나이 25세는 회원가입 성공입니다.
// - 입력하신 나이 12세는 회원가입 실패입니다.
int age = 25; //사용자 입력
//String result1 = age >= 19 && age < 60 ? "성공" : "실패";
String result1 = ((age >= 19) && (age < 60)) ? "성공" : "실패";
System.out.printf("입력하신 나이 %d세는 회원가입 %s입니다.", age, result1);
Reference
この問題について(アカデミー5日目-Java), 我々は、より多くの情報をここで見つけました https://velog.io/@hi-dae-in/국비-학원-5일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol