논리 값을 부정해서 반대 값으로 변경하는 연산자다. 제어문을 활용할 때 많이 쓰인다.
!변수명 또는 !메소드호출구문 또는 !비교연산 으로 표현할 수 있다.
boolean flag=true;
System.out.println("flag : "+flag); //true 출력
System.out.println("!flag : "+!flag); //false 출력
System.out.println("!!flag : "+!!flag); //true 출력
//기능 호출을 부정
String name="LEE";
System.out.println(!name.equals("KIM"); //true 출력
//비교하는 값이 아닌지 확인한다. 아니면 true 값을 출력 가능.
변수명.equals
란? String 자료형은 하나의 클래스이기 때문에 동등 비교 연산을 할 수 없어서 값을 비교하고 싶을 땐 equals를 사용해주어야 한다. 동등 연산자(==)로 비교할 때 String 자료형에 저장된 리터럴이 비교되는 것이 아닌 저장된 주소를 구분하여 비교하기 때문에 구하려는 값에 오류가 난다.피연산자의 값에 1을 증감 하는 연산자이다. 앞에 있으면 전위 연산자로 증감 연산자 먼저 실행 후 나머지 연산을 실행한다. 후위 연산자는 다른 연산을 우선 실행하고 증감 연산자를 실행한다.
변수++, 변수—, ++변수, —변수 같은 방법으로 표현 가능하다.
//다른 연산자가 없을 때
int num=0;
num++; //num에 1 더해서 저장.
System.out.println(num); //1 출력
++num; //num에 1 더해서 저장.
System.out.println(num); //2 출력
//전위, 후위 연산
num=0; //데이터를 0으로 초기화.
int result=0;
result=++num; //num+1 연산을 진행 후 대입
System.out.println(num); //1 출력
num=0; //데이터를 0으로 초기화.
int result=0;
result=num++; //num을 result에 대입 먼저 진행 후 num+1 연산.
//result는 0, num은 1이 된다.
System.out.println(num); //0 출력
두 개의 피연산자를 비교할 때 쓰이는 연산자다. 데이터가 같은지 다른지를 비교하는 동등 비교 연산자와 숫자 값의 크기를 비교하는 크기 비교 연산자가 있다.
int a = 10;
int b = 20;
int c = 10;
System.out.println(a==c); //true 출력
System.out.println(a!=b); //true 출력
실수형, 문자형도 비교가 가능하다. 문자형은 데이터가 숫자로 저장되어 있기 때문에 숫자의 크기를 비교해서 같은 문자인지 아닌지를 판단할 수 있다.문자 비교하기
```java
char ch1='A'; //65
char ch2='a'; //97
char ch3='A';
System.out.pritln(ch1==ch2); //false 출력
System.out.println(ch1==ch3); //true 출력
System.out.println(ch1==65); //true 출력
```
문자열은 동등 비교가 불가하다. 따로 정해진 equals
기능을 활용해야 비교할 수 있다. 위에 eqauls 참고.
int a=20;
int b=30;
System.out.println(a>b); //false 출력
System.out.println(b>=30); //true 출력
//Scanner 클래스를 활용해서 사용자의 나이를 입력 받아 성인,미성년자 구분이 가능
//Scanner 선언이 되어있다고 가정
System.out.print("나이 입력 : ");
int age=sc.nextInt();
System.out.println("성인인가요? "+(age>=20));
//입력한 값에 따라 성인인가요? true/false 로 구분해서 출력
논리 값 두 개를 비교할 때 사용한다.
&& : AND 연산. 논리 값이 둘 다 true 일 때만 true 를 반환한다.
|| : OR 연산. 논리 값 중 하나만 true 여도 true 를 반환한다. 둘 다 false 일 때만 false 반환.
//관리자 아이디를 구분할 때 사용 할 수 있다.
String userId="admin";
String password="1111";
//비밀번호는 특수문자나 영문이 섞이기도 해서 문자열로 받는 것이 좋다.
System.out.println(userId.equals("admin")&&password.equals("1111")); //true 출력
String address=sc.next(); //사용자로부터 주소를 입력 받는다.
System.out.println(address.equals("서울")||address.equals("경기도"));
//입력한 주소가 서울이나 경기도 일때 true 출력. 둘 다 아닐 때 false 출력.
자기 자신과 연산을 실행한 후 연산 결과를 자신에게 누적 해서 대입하는 연산자다.
+=, -=, *=, /=, %= 으로 사용 가능하다. 증감 연산자는 1씩 증가하지만 대입 연산자는 원하는 값을 증가 시킬 수 있다.
int a=0;
a+=10; //a=a+10 ->10
a+=100; //a=a+100 ->110
System.out.println(a); //110 출력
//과목의 총합계와 평균을 구해볼 수 있다
int total = 0;
System.out.print("국어 : "); //사용자가 입력할 값을 구분할 수 있도록 출력
total=sc.nextInt();
System.out.print("수학 : ");
total+=sc.nextInt(); //두번째 값부터는 누적할 수 있게 복합 대입 연산자를 사용한다.
System.out.print("영어 : ");
total=sc.nextInt();
System.out.println("합계 : "+total+", 평균 : "+((double)total/3));
//사용자가 입력한 값의 합계와 평균이 출력된다.
//평균값은 소숫점을 생각해서 double 자료형으로 변환해준다.
조건식 ? true일때 처리 방식 : false일때 처리 방식 같은 형태로 나타낼 수 있다. 삼항 연산자 안에 삼항 연산자를 중첩 해서 사용하는 것도 가능하다. 다만 가독성이 떨어지기 때문에 굳이 사용하진 않는다.
//입력받은 점수에 따라 합격/불합격을 구분
int num=0;
System.out.print("점수 입력 : "); //사용자가 입력할 수 있도록 메시지 출력
num=sc.nextInt();
String result=num>=70?"합격":"불합격";
//입력한 점수가 70점 이상이면 합격, 70점 미만이면 불합격을 저장한다.
System.out.println(result);