컴퓨터의 가장 기본적인 용도 중 하나는 수학 연산을 수행하는 것입니다. 컴퓨터 언어로서 Java는 변수를 조작할 수 있는 풍부한 연산자 세트도 제공합니다. 연산자를 다음 그룹으로 나눌 수 있습니다.
산술 연산자는 수학 표현식에 사용되며 수학에서와 동일한 방식으로 작동합니다. 다음 표에는 모든 산술 연산자가 나열되어 있습니다.
표의 예에서는 정수 변수 A의 값이 10이고 변수 B의 값이 20이라고 가정합니다.
연산자 | 설명하다 | 예 |
---|---|---|
+ | 덧셈 – 덧셈 연산자 양쪽의 값 | A + B는 30과 같습니다. |
- | 빼기 - 왼쪽 피연산자 빼기 오른쪽 피연산자 | A – B는 -10과 같습니다. |
* | 곱셈 - 연산자 양쪽의 값을 곱합니다. | A * B는 200과 같습니다. |
/ | 나누기 - 왼쪽 피연산자를 오른쪽 피연산자로 나눕니다. | B/A는 2와 같습니다. |
% | 모듈로 - 왼쪽 피연산자의 나머지 부분을 오른쪽 피연산자로 나눈 값 | B%A는 0과 같습니다. |
++ | 증분 - 피연산자의 값을 1씩 증가시킵니다. | B++ 또는 ++B는 21과 같습니다. |
-- | 감소 - 피연산자의 값을 1씩 감소시킵니다. | B-- 또는 --B는 19와 같습니다. |
둘 다 자체 증가하지만(연산 결과는 B+1과 동일함) B++와 ++B 사이에는 여전히 차이점이 있습니다. 변수 B) 1) B++는 rvalue입니다. 컴파일러에서 작동할 때 임시 변수가 먼저 생성된 다음 임시 변수를 사용하여 +1을 계산한 다음 B에 할당합니다.
따라서 아래 예제코드에서 d++를 출력할 때 결과는 +1이 아닌(이때 변수 d가 출력되고, d의 임시변수가 연산됨) 다음 결과가 출력되는 것을 알 수 있다. 인쇄된 명령문은 다시 +1이 됩니다. 최종 결과는 임시 변수의 값이 변수 d에 할당됩니다. ++d를 인쇄한 결과는 바로 +1입니다.
다음의 간단한 예제 프로그램은 산술 연산자를 보여줍니다. 다음 Java 프로그램을 복사하여 붙여넣고 Test.java 파일로 저장한 후 프로그램을 컴파일하고 실행합니다.
public class Test { public static void main(String args[]) { int a = 10; int b = 20; int c = 25; int d = 25; System.out.println("a + b = " + (a + b) ); System.out.println("a - b = " + (a - b) ); System.out.println("a * b = " + (a * b) ); System.out.println("b / a = " + (b / a) ); System.out.println("b % a = " + (b % a) ); System.out.println("c % a = " + (c % a) ); System.out.println("a++ = " + (a++) ); System.out.println("a-- = " + (a--) ); // 查看d++ 与++d 的不同System.out.println("d++ = " + (d++) ); System.out.println("d = " + d); System.out.println("++d = " + (++d) ); } }
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
a + b = 30 a - b = -10 a * b = 200 b / a = 2 b % a = 0 c % a = 5 a++ = 10 a-- = 11 d++ = 25 d =26 ++d = 27
다음 표는 Java에서 지원하는 관계 연산자를 보여줍니다.
표의 예제 정수 변수 A의 값은 10이고 변수 B의 값은 20입니다.
연산자 | 설명하다 | 예 |
---|---|---|
== | 두 피연산자의 값이 같은지 확인하고, 그렇다면 조건이 true입니다. | (A == B)는 거짓입니다(참이 아님). |
!= | 두 피연산자의 값이 같은지 확인하고, 값이 같지 않으면 조건은 참입니다. | (A != B)는 참입니다. |
> | 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 큰지 확인하고, 그렇다면 조건이 true가 됩니다. | (A>B)는 사실이 아닙니다. |
< | 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작은지 확인하고, 그렇다면 조건이 true가 됩니다. | (A < B)는 참입니다. |
>= | 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 크거나 같은지 확인하고, 그렇다면 조건이 true가 됩니다. | (A>=B)는 거짓입니다. |
<= | 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작거나 같은지 확인하고, 그렇다면 조건이 true가 됩니다. | (A <= B)는 참입니다. |
다음의 간단한 예제 프로그램은 관계 연산자를 보여줍니다. 다음 Java 프로그램을 복사하여 붙여넣고 Test.java 파일로 저장한 후 프로그램을 컴파일하고 실행합니다.
public class Test { public static void main(String args[]) { int a = 10; int b = 20; System.out.println("a == b = " + (a == b) ); System.out.println("a != b = " + (a != b) ); System.out.println("a > b = " + (a > b) ); System.out.println("a < b = " + (a < b) ); System.out.println("b >= a = " + (b >= a) ); System.out.println("b <= a = " + (b <= a) ); } }
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
a == b = false a != b = true a > b = false a < b = true b >= a = true b <= a = false
Java는 정수 유형(int), 긴 정수(long), 짧은 정수(short), 문자 유형(char) 및 바이트 유형(byte)에 적용되는 비트 연산자를 정의합니다.
비트 연산자는 모든 비트에 대해 작동하며 비트 단위로 작동합니다. a = 60, b = 13이라고 가정하면 이진 형식 표현은 다음과 같습니다.
A = 0011 1100 B = 0000 1101 ----------------- A&B = 0000 1100 A | B = 0011 1101 A ^ B = 0011 0001 ~A= 1100 0011
다음 표에는 정수 변수 A의 값이 60이고 변수 B의 값이 13이라고 가정할 때 비트 연산자의 기본 연산이 나열되어 있습니다.
연산자 | 설명하다 | 예 |
---|---|---|
& | 비트 AND 연산자, 두 피연산자의 특정 비트가 0이 아닌 경우에만 결과는 1입니다. | (A&B), 12를 얻습니다. 즉, 0000 1100입니다. |
| | 비트 OR 연산자는 두 피연산자 중 특정 비트가 0이 아닌 한 결과는 1입니다. | (A | B)는 61을 얻습니다. 이는 0011 1101입니다. |
^ | 비트별 XOR 연산자는 두 피연산자 중 특정 비트가 다른 경우 결과 비트가 1입니다. | (A^B)는 49, 즉 0011 0001을 제공합니다. |
~ | 비트 보수 연산자는 피연산자의 각 비트를 뒤집습니다. | (~A)는 -61을 얻습니다. 이는 1100 0011입니다. |
<< | 비트 왼쪽 시프트 연산자. 왼쪽 피연산자는 오른쪽 피연산자가 지정한 비트 수만큼 왼쪽으로 이동합니다. | << 2는 240, 즉 1111 0000을 제공합니다. |
>> | 비트 오른쪽 시프트 연산자. 왼쪽 피연산자는 오른쪽 피연산자가 지정한 비트 수만큼 오른쪽으로 비트 단위로 이동합니다. | A >> 2는 15를 얻으며 이는 1111입니다. |
>>> | 비트 오른쪽 시프트 제로 패딩 연산자. 왼쪽 피연산자의 값은 오른쪽 피연산자가 지정한 비트 수만큼 오른쪽으로 이동하고 결과 빈자리는 0으로 채워집니다. | A>>>2는 15를 얻으며 이는 0000 1111입니다. |
다음의 간단한 예제 프로그램은 비트 연산자를 보여줍니다. 다음 Java 프로그램을 복사하여 붙여넣고 Test.java 파일로 저장한 후 프로그램을 컴파일하고 실행합니다.
public class Test { public static void main(String args[]) { int a = 60; /* 60 = 0011 1100 */ int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a & b; /* 12 = 0000 1100 */ System.out.println("a & b = " + c ); c = a | b; /* 61 = 0011 1101 */ System.out.println("a | b = " + c ); c = a ^ b; /* 49 = 0011 0001 */ System.out.println("a ^ b = " + c ); c = ~a; /*-61 = 1100 0011 */ System.out.println("~a = " + c ); c = a << 2; /* 240 = 1111 0000 */ System.out.println("a << 2 = " + c ); c = a >> 2; /* 215 = 1111 */ System.out.println("a >> 2 = " + c ); c = a >>> 2; /* 215 = 0000 1111 */ System.out.println("a >>> 2 = " + c ); } }
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
a & b = 12 a | b = 61 a ^ b = 49 ~a = -61 a << 2 = 240 a >> 2 = 15 a >>> 2 = 15
다음 표에는 부울 변수 A가 true이고 변수 B가 false라고 가정하는 논리 연산자의 기본 연산이 나열되어 있습니다.
연산자 | 설명하다 | 예 |
---|---|---|
&& | 논리 AND 연산자라고 합니다. 두 피연산자가 모두 참인 경우에만 조건이 참입니다. | (A && B)는 거짓입니다. |
| | 논리 OR 연산자라고 합니다. 두 피연산자 중 하나라도 true이면 조건은 true입니다. | (A | | B)는 사실입니다. |
! | 논리 NOT 연산자라고 합니다. 피연산자의 논리적 상태를 반전시키는 데 사용됩니다. 조건이 true이면 논리 NOT 연산자는 false가 됩니다. | ! (A && B)는 참입니다. |
다음의 간단한 예제 프로그램은 논리 연산자를 보여줍니다. 다음 Java 프로그램을 복사하여 붙여넣고 Test.java 파일로 저장한 후 프로그램을 컴파일하고 실행합니다.
public class Test { public static void main(String args[]) { boolean a = true; boolean b = false; System.out.println("a && b = " + (a&&b)); System.out.println("a || b = " + (a||b) ); System.out.println("!(a && b) = " + !(a && b)); } }
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
a && b = false a || b = true !(a && b) = true
다음은 Java 언어에서 지원하는 할당 연산자입니다.
연산자 | 설명하다 | 예 |
---|---|---|
= | 단순 할당 연산자, 오른쪽 피연산자의 값을 왼쪽 피연산자에 할당합니다. | C = A + B는 A + B에서 얻은 값을 C에 할당합니다. |
+ = | 왼쪽 피연산자와 오른쪽 피연산자를 더하고 왼쪽 피연산자에 값을 할당하는 덧셈 할당 연산자 | C + = A는 C = C + A와 동일합니다. |
-= | 왼쪽 피연산자와 오른쪽 피연산자를 빼고 그 값을 왼쪽 피연산자에 할당하는 빼기 및 할당 연산자 | C - = A는 C = C - A와 같습니다. |
* = | 왼쪽 피연산자와 오른쪽 피연산자를 곱하고 그 값을 왼쪽 피연산자에 할당하는 곱셈 및 할당 연산자 | C * = A는 C = C * A와 같습니다. |
/ = | 나누기 및 할당 연산자는 왼쪽 피연산자와 오른쪽 피연산자를 나누고 값을 왼쪽 피연산자에 할당합니다. | C / = A는 C = C / A와 같습니다. |
(%)= | 왼쪽 및 오른쪽 피연산자를 모듈로화하고 왼쪽 피연산자에 값을 할당하는 모듈로 및 할당 연산자 | C%=A는 C=C%A와 같습니다. |
<< = | 왼쪽 시프트 할당 연산자 | C << = 2는 C = C << 2와 동일합니다. |
>> = | 오른쪽 시프트 할당 연산자 | C >> = 2는 C = C >> 2와 같습니다. |
&= | 비트 AND 할당 연산자 | C&=2는 C=C&2와 같습니다. |
^ = | 비트별 XOR 할당 연산자 | C^=2는 C=C^2와 동일합니다. |
= | | 비트 OR 할당 연산자 | C|=2는 C=C|2와 동일합니다. |
다음의 간단한 예제 프로그램은 할당 연산자를 보여줍니다. 다음 Java 프로그램을 복사하여 붙여넣고 Test.java 파일로 저장한 후 프로그램을 컴파일하고 실행합니다.
public class Test { public static void main(String args[]) { int a = 10; int b = 20; int c = 0; c = a + b; System.out.println("c = a + b = " + c ); c += a ; System.out.println("c += a = " + c ); c -= a ; System.out.println("c -= a = " + c ); c *= a ; System.out.println("c *= a = " + c ); a = 10; c = 15; c /= a ; System.out.println("c /= a = " + c ); a = 10; c = 15; c %= a ; System.out.println("c %= a = " + c ); c <<= 2 ; System.out.println("c <<= 2 = " + c ); c >>= 2 ; System.out.println("c >>= 2 = " + c ); c >>= 2 ; System.out.println("c >>= a = " + c ); c &= a ; System.out.println("c &= a= " + c ); c ^= a ; System.out.println("c ^= a= " + c ); c |= a ; System.out.println("c |= a= " + c ); } }
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
c = a + b = 30 c += a = 40 c -= a = 30 c *= a = 300 c /= a = 1 c %= a = 5 c <<= 2 = 20 c >>= 2 = 5 c >>= 2 = 1 c &= a = 0 c ^= a = 10 c |= a = 10
조건 연산자는 삼항 연산자라고도 합니다. 이 연산자에는 세 개의 피연산자가 있으며 부울 표현식의 값을 평가해야 합니다. 이 연산자의 주요 목적은 변수에 할당할 값을 결정하는 것입니다.
variable x = (expression) ? value if true : value if false
public class Test { public static void main(String args[]){ int a , b; a = 10; b = (a == 1) ? 20: 30; System.out.println( "Value of b is : " + b ); b = (a == 10) ? 20: 30; System.out.println( "Value of b is : " + b ); } }
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
Value of b is : 30 Value of b is : 20
이 연산자는 객체 인스턴스에 대해 연산을 수행하고 객체가 특정 유형(클래스 유형 또는 인터페이스 유형)인지 확인하는 데 사용됩니다.
instanceof 연산자는 다음 형식으로 사용됩니다.
( Object reference variable ) instanceof (class/interface type)
연산자 좌변의 변수가 가리키는 객체가 연산자 우변의 클래스나 인터페이스(클래스/인터페이스)의 객체라면 결과는 참이다.
예는 다음과 같습니다.
String name = 'James'; boolean result = name instanceof String; // 由于name是String类型,所以返回真
비교된 객체가 오른쪽 유형과 호환되는 경우 이 연산자는 여전히 true를 반환합니다.
다음 예를 살펴보십시오.
class Vehicle {} public class Car extends Vehicle { public static void main(String args[]){ Vehicle a = new Car(); boolean result = a instanceof Car; System.out.println( result); } }
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
true
여러 연산자가 표현식에 나타날 때 어떤 연산자가 먼저 나오나요? 여기에는 연산자 우선순위 문제가 포함됩니다. 다중 연산자 표현식에서는 연산자 우선순위가 다르면 최종 결과도 매우 달라집니다.
예를 들어 (1+3) + (3+2)*2와 같이 이 식을 더하기 기호를 가장 높은 우선순위로 하여 계산하면 답은 18이 되고, 곱셈 기호가 가장 높은 우선순위이면 답은 14.
또 다른 예는 x = 7 + 3 * 2입니다. 여기서 x는 20이 아닌 13을 얻습니다. 왜냐하면 곱셈 연산자가 더하기 연산자보다 우선순위가 높기 때문에 3 * 2가 먼저 계산되어 6을 얻은 다음 7이 더해지기 때문입니다.
다음 표에서 우선 순위가 가장 높은 연산자는 표 상단에 있고, 우선 순위가 가장 낮은 연산자는 표 하단에 있습니다.
범주 | 연산자 | 관련성 |
---|---|---|
접미사 | () [] .(점 연산자) | 왼쪽에서 오른쪽으로 |
1위안 | + + -! ~ | 오른쪽에서 왼쪽으로 |
곱셈 | */% | 왼쪽에서 오른쪽으로 |
가산성 | + - | 왼쪽에서 오른쪽으로 |
옮기다 | >> >>> << | 왼쪽에서 오른쪽으로 |
관계 | >> = << = | 왼쪽에서 오른쪽으로 |
동일한 | == != | 왼쪽에서 오른쪽으로 |
비트별 AND | & | 왼쪽에서 오른쪽으로 |
비트별 XOR | ^ | 왼쪽에서 오른쪽으로 |
비트별 OR | | | 왼쪽에서 오른쪽으로 |
논리 AND | && | 왼쪽에서 오른쪽으로 |
논리적 또는 | | | 왼쪽에서 오른쪽으로 |
상태 | ? : | 오른쪽에서 왼쪽으로 |
과제 | = + = - = * = / =%= >> = << =&= ^ = = | | 오른쪽에서 왼쪽으로 |
콤마 | , | 왼쪽에서 오른쪽으로 |