Small Grey Outline Pointer Java 연산자/instanceof 연산자
본문 바로가기
Dev./java

Java 연산자/instanceof 연산자

by sso. 2022. 4. 18.

데이터 타입과 형변환

 

 

package javaFirstClass;

public class Chapter03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		byte seven = 0B111;
		System.out.println(seven);
		//0B뒤에 오는 111(2)=>10진수로 변환해서 출력된다
	

		
	}

}

 

7

 

 

package javaFirstClass;

public class Chapter03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//실수형 리터럴
		float num333 = 3.000499F + 2.000499F; //실수 뒤에 F를 안붙이면 오류로 출력 된다
		System.out.println(num333);


		
	}

}

5.000998

 

 

 

 

 

[이스케이프 시퀀스]

 

package javaFirstClass;

public class Chapter03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//실수형 리터럴
		//float num333 = 3.000499F + 2.000499F;
		//System.out.println(num333);


	
		//이스케이프 시퀀스
		System.out.println("1.ab"+'\b'+'c');//백스페이스 문자
		System.out.println("2.ab"+'\t'+'c');//탭 문자
		System.out.println("3.ab"+'\n'+'c');//개행 문자
		System.out.println("============");
		System.out.println("4.ab"+'\r'+'c');//캐리지 리턴 문자(뒤에 것을 앞으로 보내고 앞에것은 지움)
		System.out.println("5.ab"+'\\'+'c');
		System.out.println("6.ab"+'\"'+'c');
		System.out.println("7.ab"+'\''+'c');
		
	}

}

1.abc
2.ab c
3.ab
c
============
4.ab
c
5.ab\c
6.ab"c
7.ab'c

 

 

 

 

 

package javaFirstClass;

public class Chapter03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//실수형 리터럴

		
		int num11=7;
		int num22=3;
		
		double num1=7.0;
		double num2=3.0;
		double num3=num1/num2;
		System.out.println(num3);
		
		System.out.println(num11==num1);
		System.out.println(num22==num2);
		//int num11과 double num1이 어째서 같다고 나올까?
		//단순한 숫자는 근사치로 맞춰서 같은 값으로 반환 된다. 
        //엄밀히 따지면 int 7과 double7.0은 같은 숫자가 아니다.
		
		
		
	}

}

2.3333333333333335
true
true

 

 

 

 


 

 

연산자

 

 

[복합 대입 연산자]

 

&= a=a&b <==같은 의미==> a &= b
^= a=a^b <==같은 의미==> a ^= b
<<= a= a<<b <==같은 의미==> a <<= b
>>>= a= a>>>b <==같은 의미==> a >>>= b

 

 

package javaFirstClass;

public class Chapter03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		

		
		short num=10;
		//num=num+77L;
		num += 77L;
		System.out.println(num);
		
		int rate=3;
		//rate = rate * 3.5;//double 에서 int로 바꿀 수 없어서 오류 발생
		rate*=3.5;
		System.out.println(rate); 
        //규칙에 어긋나는 연산도, 복합 대입 연산자를 이용하면 연산이 가능하다
		
	}

}

87
10

 

 

복합 대입 연산자를 사용하면 알아서 형변환을 해주지만, 

이런 식으로 규칙에 어긋나는 코드를 짜서 출력값만 내기 위한 것은 좋지 않다

가급적이면, 명시적 형변환을 적어주는 것이 좋다

 

package javaFirstClass;

public class Chapter03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		

		
		short num=10;
		//num=num+77L;
		num =(short)(num+ 77L);
		System.out.println(num);
		
		int rate=3;
		//rate = rate * 3.5;//double 에서 int로 바꿀 수 없어서 오류 발생
		rate=(int)(rate*3.5); //명시적 형변환을 이용하여 연산
		System.out.println(rate); 
		
	}

}

 

 


 

 

 

논리 연산자

 

package javaFirstClass;

public class Chapter03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		

		
		int a=11;
		int b=22;
		boolean result;
		
		result=(1< a) && (a < 100);
		System.out.println("1초과 100 미만인가?" +result);
		System.out.println(a);
		
		
		//b에 저장된 값이 2 or 3 의 배수인가?
		result=(b%2)==0 || (b%3)==0; //2로 나눠지거나 or(||) 3으로 나눠지는 수 인가?? 
		System.out.println("2 또는 3의 배수인가?" +result);
		System.out.println(b);
		
		
		//변수 a는 0인가?
		result= !(a!=0);
		System.out.println("a는 0인가?" +result);
		//a!=0 => 11 != 0 (true)
		// !(11 != 0) => !(true) => false 
		
	}

}

1초과 100 미만인가?true
11
2 또는 3의 배수인가?true
22

 

a는 0인가?false

 

 

 

 

SCE : 논리연산자 사용시 주의점

 

 

package javaFirstClass;

public class Chapter03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		

		int aa=0;
		int bb=0;
		boolean resultab;
		
		resultab= ((aa+=10)<0)&&((bb+=10)>0);
		System.out.println("resultab=" +resultab); 
		System.out.println("aa=" +aa); //a+10=10 < 0 false 
		System.out.println("bb=" +bb); //위의 식이 false로 나와서 컴파일러가 실행 안하고 나와버림
		
	}

}

resultab=false
aa=10 
bb=0 //컴파일러가 +10 실행 안하고 바로 나와버림 

 

 

result = ((num1+=10) < 0) && ((num2 += 10) > 0);

&& 논리 AND 연산자 (a 와 b 둘 다 참일 때 true 반환)

 

논리연산 중 앞쪽의 식이 false 로 나올 경우 뒷쪽은 컴파일러가 실행 자체를 하지 않고 나온다

따라서 값은 false로 나온다

 

 

 

 

result = ((num1+=10) < 0) || ((num2 += 10) > 0);

((num1+=10) < 0) 가 true로 나올 경우

뒷쪽의 식이 true 인지 false 인지 상관없이 또 실행되지 않으며, num2의 값은 10이 증가되지 않은 상태로 나온다

따라서 내가 의도한 대로 코드를 짠 것이 아니게 된다.

 

 

 

 

 

 


 

instanceof 연산자

 

class A { }
class B extends A { }   //클래스B는 클래스A를 상속 한다, A=부모, B=자식

public static void main(String[] args) {
  A a= new A();
  B b = new B();

  System.out.println(a instanceof A);   // true 
  System.out.println(b instanceof A);   // true (A를 상속 받았기 때문)
  System.out.println(a instanceof B);    // false 
  System.out.println(b instanceof B);    // true
}

instanceof 연산자

객체의 타입을 확인하는 연산자. 주로 조건문에서 사용되며 

참조변수 instanceof 클래스명 의 형태로 연산한다. 연산 결과로 true or false 를 반환한다

결과 값이 true일 경우 해당 참조변수는 검사한 타입으로 형변환이 가능하다

 

a instanceof A

=> a는 클래스A의 참조변수 이므로 true

a instanceof B 

=> a는 클래스B의 참조변수도 아니고, 클래스B를 상속받은 것도 아니다 false

 

 

class B 는 class A를 상속 받았다=> 이해가 잘 안가서 아래 그림을 그려 봤다

 

 

 

 

 

 

 

 

 

 

728x90

'Dev. > java' 카테고리의 다른 글

Java 조건문(if~else)  (0) 2022.04.23
Java String  (0) 2022.04.23
Java Scanner/ next, netxLine  (0) 2022.04.23
연산자/제어문  (0) 2022.04.20
Java의 시작, 변수와 상수  (0) 2022.04.15

댓글