관리 메뉴

나구리의 개발공부기록

자바의 정석 기초편 ch3 - 9 ~ 14[사칙연산자, 산술변환 반올림 Math.round(), 나머지 연산자, 비교연산자, 문자열의 비교] 본문

유튜브 공부/JAVA의 정석 기초편(유튜브)

자바의 정석 기초편 ch3 - 9 ~ 14[사칙연산자, 산술변환 반올림 Math.round(), 나머지 연산자, 비교연산자, 문자열의 비교]

소소한나구리 2023. 11. 5. 15:47

1) 사칙연산자

  • 같은 타입의 피연산자만 계산 가능
  • int / int -> 결과가 int타입으로 소수점 이하는 버려짐
  • int / float -> float(산술변환) / float -> float

2) 산술변환

  • 연산 전에 피연산자의 타입을 일치 시키는 것
  • 두 연산자의 타입을 보다 큰 타입으로 일치 시킴
  • int보다 작은 타입(byte, char, short) 이면 int로 변환됨 (int보다 작은 타입은 범위가 너무 작다보니 int타입으로 변환됨)

 

예제

int a = 1_000_000_000;
int b = 2_000_000_000;
long c = a * b;       // 에러 발생 (a와 b가 int타입)
long c = (long)a * b; // OK (a 혹은 b타입 중 한가지를 형변환 해줘야 함)

3) Math.round()

  • 실수를 소수점 첫 째자리에서 반올림한 정수를 반환
  • long result = Math.round(4.52);
    • 4.52에서 소수점 첫째 자리인 5가 반올림되어 result에 5가 저장됨.

(1) 반올림 예제

// 소수점 4째자리를 반올림하기
double pi = 3.141592;
double shortPi = Math.round(pi * 1000) / 1000.0;
              // Math.round(3.141592 * 1000) / 1000.0
              // Math.round(3141.592) / 1000.0
              // 3142 / 1000.0, int 1000으로 나누게 되면 정수가 되버려서 3이 나오게 됨
    
결과
3.142

 

(2) 버림 예제

  • pi * 1000에 대한 연산결과를 int 타입으로 형변환하고 다시 실수로 나눠서 버림 처리
double pi = 3.141592;
double shortPi = (int)(pi * 1000)/1000.0;

결과
3.141

 

4) % (나머지 연산자)

  • 오른쪽 피연산자로 나누고 남은 나머지를 반환
  • 나누는 피연산자는 0이 아닌 정수만 허용 (부호는 무시_에러는 안남)
int x = 10;
int y = 8;

System.out.printf("%d을 %d로 나누면, %n", x, y);
System.out.printf("몫은 %d이고, 나머지는 %d입니다.%n",  x / y, x % y);

결과
10을 8로 나누면,
몫은 1이고, 나머지는 2입니다.

 

5) 비교연산자

  • 두 피연산자를 비교해서 true(참) 또는 false(거짓)을 반환
    • > : 좌변 값이 크면, true 아니면 false
    • < :  좌변 값이 작으면, true 아니면 false
    • >= : 좌변 값이 크거나 같으면, true 아니면 false
    • <= : 좌변 값이 작거나 같으면, true 아니면 false
    • == : 두 값이 같으면, true 아니면 false
    • != : 두 값이 다르면, true 아니면 false
  • 문자를 비교할 경우 int로 바뀌어서 비교(아스키 코드의 값을 비교)
    • 'A' > 'B'  // 65 > 66
  • 문자열 비교에는 == 대신에 equals()를 사용해야함
  • equals는 Object 클래스의 equals를 String 클래스에서 오버라이딩해서 재정의하였기 때문에 값을 비교하는 것이고 == 비교는 원래 참조값(주소값)을 비교하기 때문
  • 문자열을 생성하는 방법에 따라 결과값에 오류가 발생할 수 있는데 문자열 저장시 new 가아닌 "abc"처럼 직접 같은 값을 저장하면 똑같은 참조를 변수에 저장한 것이기 때문에 true가 나옴(별도의 문자열 풀에서 관리됨)
  • 자세한 내용은 참조, String 등을 배워야 이해가 됨
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); // true
System.out.println(str1.equals(str2)); // true

String str3 = new String("abc");
String str4 = new String("abc");
System.out.println(str3==str4); // false(주소값이 다름, 객체지향 개념)
System.out.println(str3.equals(str4)); // true 

결과
true
true
false
true

** 출처 : 남궁성의 정석코딩_자바의정석_기초편 유튜브 강의