# 목표
자바가 제공하는 다양한 연산자를 학습하세요.
산술 연산자
비트 연산자
관계 연산자
논리 연산자
instanceof
assignment(=) operator
화살표(->) 연산자
3항 연산자
연산자 우선 순위
(optional) Java 13. switch 연산자
출처:링크텍스트
public class example{
public static void main(String[] args){
int v1= 10;
int v2= 3;
system.out.println(v1+v2); // 13
system.out.println(v1-v2); // 7
system.out.println(v1*v2); // 30
system.out.println(v1/v2); // 3
system.out.println(v1%v2); // 1
// ex :
// int start = 20억;
// int end = 21억;
// int mid = (start+end)/2 는 오버플로우가 살생한다.
// 아래의 방식은 오버플로우를 피할수있다.
int mid = start + (end-start) / 2;
// or
int mid = (start+end) >>> 1;
}
}
예시로 작성한 코드에서는 정수형 자료형을 사용하여 연산을 해서 정수 표현 범위 내에서만 결과가 만들어졌다.
public class example{
public static void main(String[] args){
double v1= 10;
double v2= 3;
system.out.println(v1+v2); // 13.0
system.out.println(v1-v2); // 7.0
system.out.println(v1*v2); // 30.0
system.out.println(v1/v2); // 3.3333333333333335
system.out.println(v1%v2); // 1.0
}
}
실수 표현 범위를 가질수 있기 때문에 소수점 아래 값도 계산되어 결과가 나오는 것을 볼수있다.
public class example{
public static void main(String[] args){
int v1=10; // 00000000 00000000 00000000 00001010
int v2=15; // 00000000 00000000 00000000 00001111
system.out.println(~v1) // 11111111 11111111 11111111 11110101= -11
system.out.println(v1&v2) // 00000000 00000000 00000000 00001010 = 10
system.out.println(v1|v2) // 00000000 00000000 00000000 00001111 = 15
system.out.println(v1^v2) // 00000000 00000000 00000000 00000101 = 5
}
}
출처:링크텍스트
public class example{
public static void main(String[] args){
system.out.println(10==10) // true
system.out.println(10==20) // false
system.out.println(10!=10) // false
system.out.println(10!=20) // true
system.out.println(10>20) // false
system.out.println(10<20) // true
system.out.println(10>=10) // true
system.out.println(10>=20) // false
}
}
public class example{
public static void main(String[] args){
bool b1= true;
bool b2= false;
if (b1 & b2) //
if (b1 | b2) //
if (b1 && b2) //
if (b1 || b2) //
}
}
public class example{
public static void main(String[] args){
MyParents_0 myParents_0 = new MyParents_0();
MyParents_1 myParents_1 = new MyParents_1();
MyParents_2 myParents_2 = new MyParents_2();
System.out.println(myParents_0 instanceof MyInterface); // false
System.out.println(myParents_1 instanceof MyInterface); // true
System.out.println(myParents_2 instanceof MyInterface); // true
System.out.println(myParents_1 instanceof MyParents_2); // true
if (myParents_1 instanceof MyInterface){
MyInterface myInterface = new MyParents_1(); // 자신의 상위 타입의 변수에 값을 할당할수있다.
System.out.println(myInterface!=null); // 자신의 상위 타입의 변수에 값을 할당할수 있다.
}
//
}
}
class MyParents_0 {}
class MyParents_1 extends MyParents_2 {}
class MyParents_2 implements MyInterface {}
interface MyInterface {}
instanceof 연산 결과가 true일 경우 해당 타입의 변수에 값을 할당할수있다.
public class example{
public static void main(String[] args){
int v1= 10;
System.out.println(v1+=20); // 30
System.out.println(v1); // 30
}
}
public class example{
public static void main(String[] args){
int v1,v2;
v1= 17; // 00000000 00000000 00000000 00010001 = 17
v2 = v1 << 3; // 00000000 00000000 00000000 10001000 = 136
v1= 17; // 00000000 00000000 00000000 00010001 = 17
v2 = v1 >> 3; // 00000000 00000000 00000000 00000010 = 2
v1= -17; // 11111111 11111111 11111111 11101111 = -17
v2 = v1 >> 3; // 11111111 11111111 11111111 11111101 = -3
v1= 17; // 00000000 00000000 00000000 00010001 = 17
v2 = v1 >>> 3; // 00000000 00000000 00000000 00000010 = 2
v1= -17; // 11111111 11111111 11111111 11101111 = -17
v2 = v1 >>> 3; // 00011111 11111111 11111111 11111101 = 536870909
}
}
public void example(){
IntFunction intSum = (x) -> x+1;
System.out.println(intSum.apply(1));
}
사용함에 있어서 특별한 조건이 필요하지만, 지금은 화살표 연산자 왼쪽엔 매개변수들이, 오른쪽에는 그 매개 값을 사용하는 로직이 작성된다고 알고 넘어가자.
15주차 람다식에 대해 정리할때 자세히 다뤄보자.
public class example{
public static void main(String[] args){
int v1= 10;
System.out.println((v1>10)?(v1=5):(v1=50)); // 50
}
}
출처:링크텍스트
public class example {
public static void main(String[] args) {
//Java 12 이전
int num = 1;
int returnNum = 0;
switch(num){
case 1:
returnNum = 1;
System.out.println("1들어옴");
break;
case 2:
returnNum = 2;
System.out.println("2들어옴");
break;
case 3:
returnNum = 3;
System.out.println("3들어옴");
break;
}
System.out.println("returnNum : [ " + returnNum + " ]"); // returnNum : [ 1 ]
//Java 12
returnNum = switch(num){
case 1 -> 1; // ->(화살표) 표현이 가능하고 data만 존재할 경우 return이 가능하다.+ break를 적지않아도 다음 case 구문으로 넘어가지 않는다.
case 2 -> 2; // ->표현 오른쪽은 꼭 단일 수행일 필요는 없다. 블록 {}안에서도 작업도 가능하다.
default -> throw new IllegalStateException("Unexpected value: " + num);
};
System.out.println("returnNum : [ " + returnNum + " ]"); // returnNum : [ 1 ]
//Java13
returnNum = switch(num){
case 1 : yield 3; // 3이 리턴된다.
default : throw new IllegalStateException("unexpected value : " + num);
};
System.out.println("returnNum : [ " + returnNum + " ]"); // returnNum : [ 3 ]
}
}
package week3;
public class Quiz {
public static void main(String[] args) {
Quiz q = new Quiz();
int result = q.solution(new int[]{4,3,2,1,2,3,4});
System.out.println(result);
}
private int solution(int[] numbers) {
int result=0;
for (int number : numbers) {
result ^= number;
}
return result;
}
}