アカデミー5日目-Java


2021.04.02


データ型キャッシュ

  • データ型を変換する技術
  • int -> float
  • double -> byte
  • コードには柔軟性の利点があります.
  • 暗黙変換、自動タイプ変換
  • お兄さん=お兄さん(お兄さんの代わりに)
  • 100%安全(損失しない値)
  • byte -> short
    byte -> int
    byte -> long
    short -> int
    short -> long
    int -> long
  • =演算子->変数=値;(代入)
  • LValue(変数)=RValue(定数、変数)
  • =演算子は、Valueのデータ型と同じである必要があります.>違うとコピーできません.(エラー!!)
  • 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);
    明示的変換、強制型変換
  • お兄ちゃん=お兄さん
  • 状況によって異なる(小型機は安全であり、小型機は不完全である)
  • 結論:これは非常に危険な仕事です...元気出して!!!間違ったら死ぬ...エラーメッセージがないから>でも値段がおかしい…!!!->論理エラー)
  • コンパイルvs実行時(★★重要★★)
    コンパイル:実際のプログラムを実行せず、言語翻訳のみを行います.ただし、その座標で文法が有効かどうかをチェックします.
    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
    整理する

  • 暗黙的変換
  • なぜ暗示するのか->開発者がそれを知っているかどうかにかかわらず、結果は安全であり、
  • を省略することができる.
  • short-> byte

  • 明示的な変換
  • なぜ明示的なのか?この仕事は間違いの可能性がある.開発者はこの事実を明確に担当し、自ら転換する->これはあなたの責任です!!
  • オーバーフローまたはアンダーフロー励起
  • //은행 계좌 : 20억
    int m1 = 2000000000;
    		
    //이체
    short m2;
    		
    //사전체크 꼭 할 것!!!
    m2 = (short)m1;
    System.out.println("계좌잔고 : "+ m2);

    実数型変換

  • float, double
  • 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
  • 文字->文字コードとして保存->charはデジタルデータ型に属します.ただし、プラスマイナスしない数字型
  • charを整数に変換する場合はintを使用する必要があります.絶対に使用できません(ショートバイト).
  • charの範囲はすべて受け入れられないので、Unicodeはすべて使用できません.(★★重要★)
  • //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<>b、等しくない)
  • 2項演算子
  • すべての演算子が数値
  • 演算の結果は常にboolean(true,false)
  • 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));
  • (★★重要★★)文字列の比較は同等の比較しかできず、演算子(=,!=)は使用できず、equals()メソッドを使用する必要があります.
  • 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
    		

    論理演算子

  • &&(and), ||(or), !(not)
  • 2項演算子(&,|),1項演算子(!)
  • 被演算子はbooleanでなければなりません.
  • 演算結果をbooleanに戻します.
  • 受動演算子を使用して、特定の規則に従って演算結果を返します.
  • 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);

    代入演算子

  • =
  • +=、-=、*=、/=、%=:複合付与演算子
  • LValue = RValue
  • 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

    増減演算子

  • ++(増加),--(減少)
  • 1項演算子
  • 数字は被演算子
  • 加算被演算子値+1,-1の演算子
  • 演算子の結果は状況によって異なります.
  • 演算子の位置および被演算子の位置を変更することができる.
  • +n:プレフィックス演算子.演算子の優先度が最も高い.
  • n+:接尾辞(接尾辞)演算子.演算子の優先度が最も低い.
  • 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);

    演算子の優先順位

  • 演算子の実行順序
  • 算術演算子>比較演算子>論理演算子>代入演算子
  • 増減演算子>算術演算子>比較演算子>論理演算子>賦値演算子>電位++n
  • 算術演算子>比較演算子>論理演算子>賦値演算子->接尾辞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--);

    条件演算子

  • A ? B :c
  • 3項演算子
  • A:条件(boolean)
  • B,C:定数,変数,演算子->値->演算の結果値
  • BとCは同じ棒グラフでなければなりません.
  • if文
  • 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);