java 연산자

jungnoeun·2021년 8월 28일
0

java

목록 보기
2/22

연산자 우선순위

  1. 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다.
  2. 단한(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다.
  3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방법은 왼쪽에서 오른쪽이다.









산술 연산

  1. 두 피연산자의 타입을 같게 일치시킨다. (보다 큰 타입으로 일치)

    long + int -> long + long -> long
    float + int -> float + float -> float
    double + float -> double + double -> double

  2. 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.

    byte + short -> int + int -> int
    char + short -> int + int -> int





조심해야 할 변환

class OperatorEx8 {
    public static void main(String args[]) {
    	int a = 1_000_000;    //1,000,000  1백만
        int b = 2_000_000;    //2,000,000  2백만
        
        long c = a * b;	      // a * b = 2,000,000,000,000 ?
        
        System.out.println(c);
    }
}
  • a * b의 결과 값을 담는 c의 자료형이 long이라 2 x 10^12 을 저장하기에 충분해서 '2000000000000'이 출력될 것 같지만 결과값은 전혀 다르다.
  • 이유는 int타입과 int타입의 결과값은 int타입이기 때문이다.
  • a * b의 결과가 이미 최대값을 초과하여 -1454759936이므로 long형으로 자동형변환되어도 값은 변하지 않는다.

int (1000000) * int (1000000) -> int (-727379968) -> 오버플로우 발생

  • '2000000000000'의 값을 c에 저장하려면 long c = (long)a*b로 형변환해야 한다.
long c = (long)a * b;
-> long c = (long)1000000 * 2000000;
-> long c = 1000000L * 2000000;
-> long c = 1000000L * 2000000L;
-> long c = 2000000000000;









문자열 비교

  • 문자열들을 비교할 때는 비교연산자 '=='대신 equals라는 메서드를 사용해야 한다.
  • 두 문자열이 같으면 true, 다르면 false를 반환한다.
  • '=='는 객체가 다르면 다르다고 한다. 그래서 객체가 달라도 내용이 같으면 true를 리턴하는 equals를 쓴다.
String str1 = "abc";
String str2 = new String("abc");

System.out.println(str1.equals("abc"));
System.out.println(str2.equals("abc"));
  • 문자열을 비교할때 대소문자를 구분하지 않을 때는 문자열.equalsIgnoreCase("abc")를 사용한다.









조건연산자

조건식 ? 식1 : 식2
=> 조건식이 참이면 식1이, 거짓이면 식2이 연산결과가 된다.

조선 연산자 예시

result = (x>y) ? x : y;
profile
개발자

0개의 댓글