데이터 타입과 형변환
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를 상속 받았다=> 이해가 잘 안가서 아래 그림을 그려 봤다
'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 |
댓글