연산자 종류
산술연산자 | +(덧셈) - (뻴셈) * (곱셈) / (나눗셈) % (나머지 연산) << , >> (쉬프트 연산) |
비교연산자 | > , < , >= , <= , == (=은 대입연산자로 '같다'는 ==을 사용) , != |
논리연산자 | && , || , ! , & , | , ^ , ~ |
대입연산자 | = |
그외 형변환 연산자, 삼항연산자(조건식) 등 존재.
피연산자 1개 → 단항연산자
피연산자 2개 → 이항연산자 (대부분 이항연산자)
피연산자 3개 → 삼항연산자
※ 우선순위
단항연산자 > 이항연산자
산술연산자 > 비교연산자 > 논리연산자 > 대입연산자
증감연산자
증가 연산자 (++) : 피연산자 값을 1 증가.
감소 연산자 ( -- ) : 피연산자 값을 1 감소.
전위형 (prefix) | 값 참조 전 증가 | ++i |
후위형 (postfix) | 값 참조 후 증가 | i++ |
j = ++i (i=5)
j는 i의 값에서 1 증가된 6의 값이 저장됨 ( j = 6)
j = i++ (i=5)
j에 i의 값인 5가 저장된 후에 i 값 증가. ( j = 5)
System.out.println( i++ ); // i의 값이 출력된 후에, i 값 증가.
10 - x++ 연산을 먼저 수행하는데, x++는 후위 증가연산자이므로 참조후 증가 이다.
즉, 10 - 2로 수행후 y= 5+8, y=13이 된다. 계산 수행후 x는 1 증가해 x=3이 된다.
형변환 연산자
서로 다른 타입간 연산 수행시, 연산을 수행하기 전에 타입을 일치시켜야 한다. 변수나 리터럴 타입을 변환하는것을 '형변환(casting)' 이라고 한다. 형변환하는 방법은 아주 간단한데, 피연산자 앞에 변환하고자 하는 타입을 붙여주면 된다.
(변환하고자 하는 타입) 피연산자
캐스팅연산자, 형변환 연산자라고 한다.
int -> char | (char)65 | = 'A' |
int형인 65(피연산자) 앞에 char을 붙여주면, char형으로 변환되어 65가 'A'로 바뀐다.
자동 형변환
편의상의 이유로 형변환을 생략할때가 있는데, 컴파일러가 생략된 형변환을 자동적으로 수행하는것을 자동형변환이라 한다.
하지만, 변수가 저장할수 있는 값의 범위보다 더 큰 값을 저장하려는 경우에 형변환을 생략시 에러가 발생한다.
byte b = 1000; ( byte 저장범위: -128 ~ 127 )
→ 저장하는 값이 byte 범위보다 크기 때문에, 명시적으로 형변환을 해주지 않으면 에러.
byte b = (byte)1000;
→ 명시적 형변환으로 에러X, 그러나 값 손실은 발생.
※ 자동 형변환시, 기존의 값을 최대한 보존할수 있는 타입으로 변환.
byte(1byte) < short(2byte) < int(4byte) < long(8byte) < float(4byte) < double(8byte) |
그냥 10 / 4 하면, 2.5가 아닌 정수 2만 결과로 나온다. 정확한 결과값을 구하기 위해 형변환을 하기도 한다.
둘다 int형인 a와 b에서 둘중 하나만 float로 형변환 해주면, 나머지는 자동으로 float로 형변환되어 계산된다.
(int형인 a보다 float형으로 바꿔준 b가 더 크기 때문에, a가 b에 맞춰 자동 형변환된다.)
이런 경우에는 원하는 값을 얻을수 없다. a와b가 int형이고, a*b의 결과 값도 int형이기 때문이다. (오버플로우가 발생하기 때문)
따라서, a나 b 둘중 하나를 long 타입으로 형변환을 해주면 원하는 결과를 얻을 수 있다.
MAath.round()
이 함수는 소수점 첫째자리에서 반올림한 결과를 정수로 반환한다.
long result = Math.round(4.52);
rewult = 5로 결과 반환.
무조건, 소수점 첫째자리에서 반환하기 떄문에 소수점 넷째자리에서 반올림 하고 싶은경우 1000을 곱하는 등 10의 n제곱으로 곱하고 나누어 조절한다.
double pi = 3.141592;
double result = Math.round( pi * 1000 );
결과로 3142 반환.
문자열 비교
equals()을 사용해서 비교한다. ( ==을 이용할경우 내용은 같아도 객체가 다르면 다르다고 인식하기 때문)
이때 equals()는 대소문자도 구분해 처리한다. 대소문자를 구분하지 않고 비교하고 싶으면,
equalsIgnoreCase()를 사용하면 된다.
'자바' 카테고리의 다른 글
MVC 패턴이란? (0) | 2023.11.21 |
---|---|
[자바 기초] 기본형 종류, 범위(+키워드) (0) | 2021.03.13 |
[자바 기초] 상수와 리터럴 (0) | 2021.03.13 |
[자바] 자주 발생하는 오류 정리 (0) | 2021.03.08 |