연산자 : 연산을 수행하는 기호
피연산자 : 연산의 대상
상식선에서 해결 할 것!
<예제 3-1 >
✍️ 입력
class Ex3_1 {
public static void main(String[] args) {
int x, y;
x = y = 3; // y에 3이 저장된 후에, x에 3이 저장된다.
System.out.println("x=" + x);
System.out.println("y=" + y);
}
}
💻 출력
x=3
y=3
증감 연산자는 피연산자에 저장된 값을 1증가 또는 감소시킨다. 증감 연산자의 피연산자로 정수와 실수가 모두 가능하지만, 상수는 값을 변경할 수 없으므로 가능하지 않다.
증감 연산자가 독립적으로 쓰이면 전위형과 후위형의 차이는 없다
++i // 전위형. i의 값을 1 증가시킨다.
i++ // 후위형. 위문장과 같다.
<예제 3-2 >
✍️ 입력
class Ex3_2 {
public static void main(String args[]) {
int i=5, j=0;
j = i++;
System.out.println("j=i++; 실행 후, i=" + i +", j="+ j);
i=5; // 결과를 비교하기 위해, i와 j의 값을 다시 5와 0으로 변경
j=0;
j = ++i;
System.out.println("j=++i; 실행 후, i=" + i +", j="+ j);
}
}
💻 출력
j=i++; 실행 후, i=6, j=5
j=++i; 실행 후, i=6, j=6
<예제 3-3 >
✍️ 입력
class Ex3_3 {
public static void main(String args[]) {
int i=5, j=5;
System.out.println(i++); // i의 값을 출력 후, 1 증가
System.out.println(++j); // j의 값을 1 증가 후, 출력
System.out.println("i = " + i + ", j = " +j);
}
}
💻 출력
5
6
i = 6, j = 6
<예제 3-4 >
✍️ 입력
class Ex3_4 {
public static void main(String[] args) {
int i = -10;
i = +i;
System.out.println(i);
i = -10;
i = -i;
System.out.println(i);
}
}
}
💻 출력
-10
10
형변환이란, 변수 또는 상수의 타입을 다른 타입으로 변환하는 것
-> '(타입)피연산자' 형태
-> 괄호()는 '캐스트 연산자' 또는 '형변환 연산자' 라고 한다.
-> 형변환을 '캐스팅(casting)'이라고도 한다.
double d = 85.4;
int score = (int)d;
=> int score = (int)d; -> int score = (int)85.4; -> int score = 85;
- 형변환은 지정된 타입으로 형변환하고 그 결과를 반환할 뿐
d에는 아무런 변화가 없다.
<예제 3-5 >
✍️ 입력
class Ex3_5 {
public static void main(String[] args) {
double d = 85.4;
int score = (int) d;
System.out.println("score=" + score);
System.out.println("d=" + d);
}
}
💻 출력
score=85
d=85.4
큰 변수에 작은 것을 담는 것은 형변환이 알아서 된다.
하지만 반대의 경우 ()로 강제 형변환을 해줘야 한다.
<예제 3-6 >
✍️ 입력
class Ex3_6 {
public static void main(String args[]) {
int a = 10;
int b = 4;
System.out.printf("%d + %d = %d%n", a, b, a + b);
System.out.printf("%d - %d = %d%n", a, b, a - b);
System.out.printf("%d * %d = %d%n", a, b, a * b);
System.out.printf("%d / %d = %d%n", a, b, a / b);
System.out.printf("%d / %f = %f%n", a, (float)b, a / (float)b);
}
}
💻 출력
10 + 4 = 14
10 - 4 = 6
10 * 4 = 40
10 / 4 = 2
10 / 4.000000 = 2.500000
<예제 3-7 >
✍️ 입력
class Ex3_7 {
public static void main(String[] args) {
System.out.println(5/2);
System.out.println(5/(float)2); // (float)5/2의 결과도 동일
}
}
💻 출력
2
2.5
<예제 3-8 >
✍️ 입력
class Ex3_8 {
public static void main(String[] args) {
byte a = 10;
byte b = 30;
byte c = (byte)(a * b);
System.out.println(c);
}
}
💻 출력
44
<예제 3-9 >
✍️ 입력
class Ex3_9 {
public static void main(String args[]) {
int a = 1_000_000; // 1,000,000 1백만
int b = 2_000_000; // 2,000,000 2백만
long c = a * b; // a * b = 2,000,000,000,000 ?
System.out.println(c);
}
}
💻 출력
-1454759936
<예제 3-10 >
✍️ 입력
class Ex3_10 {
public static void main(String args[]) {
long a = 1_000_000 * 1_000_000;
long b = 1_000_000 * 1_000_000L;
System.out.println("a="+a);
System.out.println("b="+b);
}
}
💻 출력
a=-727379968
b=1000000000000
이 메소드는 소수점 첫째 자리에서 반올림 한 결과를 정수로 반환한다.
-> 만일 소수점 첫째 자리가 아닌 다른 자리에서 반올림을 하려면 10의 n제곱으로 적절히 곱하고 나누어야 한다.
<예제 3-11 >
✍️ 입력
class Ex3_11 {
public static void main(String args[]) {
double pi = 3.141592;
double shortPi = Math.round(pi * 1000) / 1000.0;
System.out.println(shortPi);
}
}
💻 출력
3.142
<예제 3-12 >
✍️ 입력
class Ex3_12 {
public static void main(String args[]) {
int x = 10;
int y = 8;
System.out.printf("%d을 %d로 나누면, %n", x, y);
System.out.printf("몫은 %d이고, 나머지는 %d입니다.%n", x / y, x % y);
}
}
💻 출력
10을 8로 나누면,
몫은 1이고, 나머지는 2입니다.
<예제 3-13 >
✍️ 입력
class Ex3_13 {
public static void main(String[] args) {
System.out.println(-10%8);
System.out.println(10%-8);
System.out.println(-10%-8);
}
}
💻 출력
-2
2
-2
<예제 3-14 >
✍️ 입력
class Ex3_14 {
public static void main(String[] args) {
String str1 = "abc";
String str2 = new String("abc");
System.out.printf("\"abc\"==\"abc\" ? %b%n", "abc"=="abc");
System.out.printf(" str1==\"abc\" ? %b%n", str1=="abc");
System.out.printf(" str2==\"abc\" ? %b%n", str2=="abc");
System.out.printf("str1.equals(\"abc\") ? %b%n", str1.equals("abc"));
System.out.printf("str2.equals(\"abc\") ? %b%n", str2.equals("abc"));
System.out.printf("str2.equals(\"ABC\") ? %b%n", str2.equals("ABC"));
System.out.printf("str2.equalsIgnoreCase(\"ABC\") ? %b%n", str2.equalsIgnoreCase("ABC"));
}
}
💻 출력
"abc"=="abc" ? true
str1=="abc" ? true
str2=="abc" ? false
str1.equals("abc") ? true
str2.equals("abc") ? true
str2.equals("ABC") ? false
str2.equalsIgnoreCase("ABC") ? true
str2와 "abc"의 내용이 같은데도 '=='로 비교하면 false의 결과를 얻는다.
-> 내용은 같지만 서로 다른 객체기 때문이다.
그러나 equals()는 객체가 달라도 내용이 같으면 true를 반환한다.
-> 대소문자도 구별하지 않고 비교하고 싶다면? equalsIgnoreCase()
를 사용하자.
|| (OR결합) : 피연산자 중 어느 한 쪽이 true이면 true를 결과를 얻는다.
&& (AND결합) : 피연사자 양쪽 모두 true이어야 true를 결과로 얻는다.
<예제 3-15 >
✍️ 입력
import java.util.*; // Scanner클래스를 사용하기 위해 추가
class Ex3_15 {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
char ch = ' ';
System.out.printf("문자를 하나 입력하세요.>");
String input = scanner.nextLine();
ch = input.charAt(0);
if('0' <= ch && ch <= '9') {
System.out.printf("입력하신 문자는 숫자입니다.%n");
}
if(('a' <= ch && ch <= 'z') || ('A'<= ch && ch <= 'Z')) {
System.out.printf("입력하신 문자는 영문자입니다.%n");
}
} // main
}
💻 출력
결과 1)
문자를 하나 입력하세요.>7
입력하신 문자는 숫자입니다.
결과 2)
문자를 하나 입력하세요.>a
입력하신 문자는 영문자입니다.
<예제 3-16 >
✍️ 입력
class Ex3_16 {
public static void main(String[] args) {
boolean b = true;
char ch = 'C';
System.out.printf("b=%b%n", b);
System.out.printf("!b=%b%n", !b);
System.out.printf("!!b=%b%n", !!b);
System.out.printf("!!!b=%b%n", !!!b);
System.out.println();
System.out.printf("ch=%c%n", ch);
System.out.printf("ch < 'a' || ch > 'z'=%b%n", ch < 'a' || ch > 'z');
System.out.printf("!('a'<=ch && ch<='z')=%b%n", !('a'<= ch && ch<='z'));
System.out.printf(" 'a'<=ch && ch<='z' =%b%n", 'a'<=ch && ch<='z');
} // main의 끝
}
💻 출력
b=true
!b=false
!!b=true
!!!b=false
ch=C
ch < 'a' || ch > 'z'=true
!('a'<=ch && ch<='z')=true
'a'<=ch && ch<='z' =false
<예제 3-17 >
✍️ 입력
class Ex3_17 {
public static void main(String args[]) {
int x, y, z;
int absX, absY, absZ;
char signX, signY, signZ;
x = 10;
y = -5;
z = 0;
absX = x >= 0 ? x : -x; // x의 값이 음수이면, 양수로 만든다.
absY = y >= 0 ? y : -y;
absZ = z >= 0 ? z : -z;
signX = x > 0 ? '+' : ( x==0 ? ' ' : '-'); // 조건 연산자를 중첩
signY = y > 0 ? '+' : ( y==0 ? ' ' : '-');
signZ = z > 0 ? '+' : ( z==0 ? ' ' : '-');
System.out.printf("x=%c%d%n", signX, absX);
System.out.printf("y=%c%d%n", signY, absY);
System.out.printf("z=%c%d%n", signZ, absZ);
}
}
💻 출력
x=+10
y=-5
z= 0
[출처] 자바의 정석 <기초편> (남궁 성 지음)