Java는 필요에 따라 사용할 수 있는 다양한 유형의 연산자를 제공합니다. 제공하는 기능에 따라 분류됩니다. 이 기사에서는 Java 연산자에 대해 배우고 해당 유형을 모두 배웁니다.
Java 연산자란 무엇입니까?
Java의 연산자는 Java에서 특정 작업을 수행하는 데 사용되는 기호입니다. 연산자는 덧셈, 곱셈 등과 같은 작업을 쉽게 보이지만 이러한 작업의 구현은 상당히 복잡합니다.
Java의 연산자 유형
Java에는 여러 유형의 연산자가 있으며 모두 아래에 언급되어 있습니다.
1. 산술 연산자
기본 데이터 유형에 대한 간단한 산술 연산을 수행하는 데 사용됩니다.
- * : 곱셈
- / : 분할
- %: 기준 치수
- + : 덧셈
- – : 빼기
예:
자바 // Java Program to implement // Arithmetic Operators import java.io.*; // Drive Class class GFG { // Main Function public static void main (String[] args) { // Arithmetic operators int a = 10; int b = 3; 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('a % b = ' + (a % b)); } }> 산출
a + b = 13 a - b = 7 a * b = 30 a / b = 3 a % b = 1>
2. 단항 연산자
단항 연산자에는 피연산자가 하나만 필요합니다. 값을 증가, 감소 또는 부정하는 데 사용됩니다.
- – : 단항 마이너스 , 값을 부정하는 데 사용됩니다.
- + : 단항 플러스 양수 값을 나타냅니다(단, 이 값이 없으면 숫자는 양수입니다). 피연산자의 유형이 byte, char 또는 short인 경우 int로 자동 변환을 수행합니다. 이를 단항 숫자 승격이라고 합니다.
- ++: 증분 연산자 , 값을 1씩 증가시키는 데 사용됩니다. 증가 연산자에는 두 가지 종류가 있습니다.
- 사후 증분: 값은 먼저 결과를 계산하는 데 사용된 다음 증가됩니다.
- 사전 증분: 값이 먼저 증가한 다음 결과가 계산됩니다.
- – – : 감소 연산자 , 값을 1씩 감소시키는 데 사용됩니다. 감소 연산자에는 두 가지 종류가 있습니다.
- 사후 감소: 값은 먼저 결과를 계산하는 데 사용된 다음 감소됩니다.
- 사전 감소: 값 먼저 감소한 다음 결과가 계산됩니다.
- ! : 논리 연산자 아님 , 부울 값을 반전하는 데 사용됩니다.
예:
자바 // Java Program to implement // Unary Operators import java.io.*; // Driver Class class GFG { // main function public static void main(String[] args) { // Interger declared int a = 10; int b = 10; // Using unary operators System.out.println('Postincrement : ' + (a++)); System.out.println('Preincrement : ' + (++a)); System.out.println('Postdecrement : ' + (b--)); System.out.println('Predecrement : ' + (--b)); } }> 산출
Postincrement : 10 Preincrement : 12 Postdecrement : 10 Predecrement : 8>
3. 할당 연산자
'=' 할당 연산자는 변수에 값을 할당하는 데 사용됩니다. 오른쪽에서 왼쪽으로의 연관성을 가집니다. 즉, 연산자의 오른쪽에 있는 값은 왼쪽의 변수에 할당되므로 오른쪽의 값은 사용하기 전에 선언해야 하거나 상수여야 합니다.
할당 연산자의 일반적인 형식은 다음과 같습니다.
variable = value;>
많은 경우 할당 연산자를 다른 연산자와 결합하여 a라는 짧은 버전의 명령문을 작성할 수 있습니다. 복합문 . 예를 들어, = a+5, 우리는 다음을 쓸 수 있습니다 += 5.
- += , 오른쪽 피연산자와 함께 왼쪽 피연산자를 추가한 다음 이를 왼쪽 변수에 할당합니다.
- -= , 왼쪽 피연산자에서 오른쪽 피연산자를 뺀 다음 이를 왼쪽 변수에 할당합니다.
- *= , 왼쪽 피연산자와 오른쪽 피연산자를 곱한 다음 이를 왼쪽 변수에 할당합니다.
- /= , 왼쪽 피연산자를 오른쪽 피연산자로 나눈 다음 이를 왼쪽 변수에 할당합니다.
- %= , 오른쪽 피연산자로 왼쪽 피연산자의 모듈로를 할당한 다음 이를 왼쪽 변수에 할당합니다.
예:
자바 // Java Program to implement // Assignment Operators import java.io.*; // Driver Class class GFG { // Main Function public static void main(String[] args) = 0b1100: ' + (f }> 산출
f += 3: 10 f -= 2: 8 f *= 4: 32 f /= 3: 10 f %= 2: 0 f &= 0b1010: 0 f |= 0b1100: 12 f ^= 0b1010: 6 f <>= 1:12f>>>= 1:6>
4. 관계 연산자
이러한 연산자는 같음, 보다 큼, 보다 작음과 같은 관계를 확인하는 데 사용됩니다. 비교 후 부울 결과를 반환하며 조건문 if-else 문뿐만 아니라 반복 문에 광범위하게 사용됩니다. 일반적인 형식은,
variable relation_operator value>
관계 연산자 중 일부는 다음과 같습니다.
- ==, 같음 좌변이 우변과 같으면 참을 반환합니다.
- !=, 같지 않음 좌변이 우변과 같지 않으면 true를 반환합니다.
- <, 미만: 왼쪽 변이 오른쪽 변보다 작으면 참을 반환합니다.
- <=, 작거나 같음 좌변이 우변보다 작거나 같으면 참을 반환합니다.
- >, 다음보다 큼: 왼쪽 변이 오른쪽 변보다 크면 true를 반환합니다.
- >=, 이상 좌변이 우변보다 크거나 같으면 참을 반환합니다.
예:
자바 // Java Program to implement // Relational Operators import java.io.*; // Driver Class class GFG { // main function public static void main(String[] args) { // Comparison operators int a = 10; int b = 3; int c = 5; System.out.println('a>b: ' + (a> b)); System.out.println('a + (a< b)); System.out.println('a>= b: ' + (a>= b)); System.out.println('a<= b: ' + (a <= b)); System.out.println('a == c: ' + (a == c)); System.out.println('a != c: ' + (a != c)); } }> 산출
a>b: 참 a = b: 참 a<= b: false a == c: false a != c: true>
5. 논리 연산자
이러한 연산자는 논리 AND 및 논리 OR 연산, 즉 디지털 전자 장치의 AND 게이트 및 OR 게이트와 유사한 기능을 수행하는 데 사용됩니다. 명심해야 할 한 가지는 첫 번째 조건이 거짓이면 두 번째 조건이 평가되지 않는다는 것입니다. 즉, 단락 효과가 있습니다. 결정을 내리기 위한 여러 조건을 테스트하는 데 광범위하게 사용됩니다. Java에는 조건이 false일 때 true를 반환하고 그 반대의 경우도 마찬가지인 Logical NOT도 있습니다.
조건부 연산자는 다음과 같습니다.
- &&, 논리 AND: 두 조건이 모두 true인 경우 true를 반환합니다.
- ||, 논리적 OR: 하나 이상의 조건이 true인 경우 true를 반환합니다.
- !, 논리적 NOT: 조건이 false일 때 true를 반환하고 그 반대의 경우도 마찬가지입니다.
예:
자바 // Java Program to implemenet // Logical operators import java.io.*; // Driver Class class GFG { // Main Function public static void main (String[] args) }> 산출
x && y: false x || y: true !x: false>
6. 삼항 연산자
삼항 연산자는 if-else 문의 단축 버전입니다. 세 개의 피연산자를 가지므로 Ternary라는 이름이 붙었습니다.
문자열을 int로 바꾸는 방법
일반적인 형식은 다음과 같습니다.
condition ? if true : if false>
위의 명령문은 조건이 true로 평가되면 '?' 뒤에 있는 명령문을 실행하고 그렇지 않으면 ':' 뒤에 있는 명령문을 실행한다는 의미입니다.
예:
자바 // Java program to illustrate // max of three numbers using // ternary operator. public class operators { public static void main(String[] args) { int a = 20, b = 10, c = 30, result; // result holds max of three // numbers result = ((a>비) ? (a> c) ? a : c : (b> c) ? b : c); System.out.println('최대 3개의 숫자 = ' + 결과); } }> 산출
Max of three numbers = 30>
7. 비트 연산자
이러한 연산자는 숫자의 개별 비트를 조작하는 데 사용됩니다. 모든 정수 유형과 함께 사용할 수 있습니다. 이진 인덱스 트리의 업데이트 및 쿼리 작업을 수행할 때 사용됩니다.
- &, 비트 AND 연산자: 입력 값의 비트 단위 AND를 반환합니다.
- |, 비트별 OR 연산자: 입력 값의 비트 단위 OR을 반환합니다.
- ^, 비트별 XOR 연산자: 입력 값의 비트별 XOR을 반환합니다.
- ~, 비트 보수 연산자: 이는 입력 값의 1의 보수 표현(예: 모든 비트가 반전됨)을 반환하는 단항 연산자입니다.
// Java Program to implement // bitwise operators import java.io.*; // Driver class class GFG { // main function public static void main(String[] args) // Bitwise operators int d = 0b1010; int e = 0b1100; System.out.println('d & e: ' + (d & e)); System.out.println('d }> 산출
d & e: 8 d | e: 14 d ^ e: 6 ~d: -11 d <>1:6 그리고>>> 1:6>>>8. 교대 연산자
이 연산자는 숫자의 비트를 왼쪽이나 오른쪽으로 이동하여 숫자에 각각 2를 곱하거나 나누는 데 사용됩니다. 숫자를 2로 곱하거나 나누어야 할 때 사용할 수 있습니다. 일반 형식 -
<<, 왼쪽 시프트 연산자: 숫자의 비트를 왼쪽으로 이동하고 결과적으로 왼쪽 공백을 0으로 채웁니다. 숫자에 2의 거듭제곱을 곱하는 것과 비슷한 효과입니다. >>, 부호 있는 오른쪽 시프트 연산자: 숫자의 비트를 오른쪽으로 이동하고 결과적으로 왼쪽 공백을 0으로 채웁니다. 가장 왼쪽 비트는 초기 숫자의 부호에 따라 달라집니다. 숫자를 2의 거듭제곱으로 나누는 것과 비슷한 효과입니다. >>>, 부호 없는 오른쪽 시프트 연산자: 숫자의 비트를 오른쪽으로 이동하고 결과적으로 왼쪽 공백을 0으로 채웁니다. 가장 왼쪽 비트는 0으로 설정됩니다. 자바// Java Program to implement // shift operators import java.io.*; // Driver Class class GFG { // main function public static void main(String[] args) { int a = 10; // using left shift System.out.println('a<<1 : ' + (a << 1)); // using right shift System.out.println('a>>1 : ' + (a>> 1)); } }>
산출a<<1 : 20 a>>1 : 5>>9. 인스턴스오브 연산자
연산자의 인스턴스는 유형 검사에 사용됩니다. 객체가 클래스, 하위 클래스 또는 인터페이스의 인스턴스인지 테스트하는 데 사용할 수 있습니다. 일반 형식 -
object instance of class/subclass/interface>자바// Java program to illustrate // instance of operator class operators { public static void main(String[] args) { Person obj1 = new Person(); Person obj2 = new Boy(); // As obj is of type person, it is not an // instance of Boy or interface System.out.println('obj1 instanceof Person: ' + (obj1 instanceof Person)); System.out.println('obj1 instanceof Boy: ' + (obj1 instanceof Boy)); System.out.println('obj1 instanceof MyInterface: ' + (obj1 instanceof MyInterface)); // Since obj2 is of type boy, // whose parent class is person // and it implements the interface Myinterface // it is instance of all of these classes System.out.println('obj2 instanceof Person: ' + (obj2 instanceof Person)); System.out.println('obj2 instanceof Boy: ' + (obj2 instanceof Boy)); System.out.println('obj2 instanceof MyInterface: ' + (obj2 instanceof MyInterface)); } } class Person { } class Boy extends Person implements MyInterface { } interface MyInterface { }>
산출obj1 instanceof Person: true obj1 instanceof Boy: false obj1 instanceof MyInterface: false obj2 instanceof Person: true obj2 instanceof Boy: true obj2 instanceof MyInterface: true>Java 연산자의 우선순위 및 연관성
두 가지 이상의 연산자 유형이 포함된 혼합 방정식을 처리할 때 우선순위 및 연관 규칙이 사용됩니다. 이러한 경우 동일한 방정식에 대해 다양한 평가가 있을 수 있으므로 이러한 규칙에 따라 방정식의 어느 부분을 먼저 고려해야 할지 결정됩니다. 아래 표는 연산자의 우선순위를 크기에 따라 내림차순으로 보여줍니다. 맨 위가 가장 높은 우선순위를 나타내고 맨 아래가 가장 낮은 우선순위를 나타냅니다.
Java 연산자에 대한 흥미로운 질문
1. 우선순위 및 연관성:
여러 연산자가 있는 방정식인 하이브리드 방정식에 관해서는 종종 혼동이 있습니다. 문제는 어떤 부분을 먼저 해결해야 하는가이다. 이러한 상황에서는 따라야 할 황금률이 있습니다. 연산자의 우선순위가 다른 경우 우선순위가 높은 것을 먼저 해결하십시오. 우선순위가 동일한 경우 연관성에 따라, 즉 오른쪽에서 왼쪽으로 또는 왼쪽에서 오른쪽으로 해결합니다. 아래 프로그램에 대한 설명은 프로그램 자체의 주석에 잘 적혀 있습니다.
자바public class operators { public static void main(String[] args) { int a = 20, b = 10, c = 0, d = 20, e = 40, f = 30; // precedence rules for arithmetic operators. // (* = / = %)>(+ = -) // a+(b/d)를 인쇄합니다. System.out.println('a+b/d = ' + (a + b / d)); // 우선순위가 같으면 연관 규칙을 따릅니다. // e/f -> b*d -> a+(b*d) -> a+(b*d)-(e/f) System.out.println('a+b*d-e/f = ' + (a + b * d - e / f)); } }>
산출a+b/d = 20 a+b*d-e/f = 219>2. 컴파일러가 되어 보세요:
우리 시스템의 컴파일러는 토큰을 생성할 때 가장 일치하는 항목을 찾기 위해 lex 도구를 사용합니다. 이를 간과하면 약간의 문제가 발생합니다. 예를 들어 다음 진술을 고려하십시오. a=b+++c ; 너무 많은 독자가 컴파일러 오류를 생성하는 것처럼 보일 수 있습니다. 그러나 lex가 생성한 토큰은 a, =, b, ++, +, c이므로 이 진술은 절대적으로 정확합니다. 따라서 이 명령문은 먼저 b+c를 a에 할당한 다음 b를 증가시키는 유사한 효과를 갖습니다. 마찬가지로, a=b++++++c; 생성된 토큰은 a, =, b, ++, ++, +, c이므로 오류가 발생합니다. 이는 두 번째 단항 피연산자 뒤에 피연산자가 없기 때문에 실제로 오류입니다.
자바public class operators { public static void main(String[] args) { int a = 20, b = 10, c = 0; // a=b+++c is compiled as // b++ +c // a=b+c then b=b+1 a = b++ + c; System.out.println('Value of a(b+c), ' + ' b(b+1), c = ' + a + ', ' + b + ', ' + c); // a=b+++++c is compiled as // b++ ++ +c // which gives error. // a=b+++++c; // System.out.println(b+++++c); } }>
산출Value of a(b+c), b(b+1), c = 10, 11, 0>3. + 오버() 사용:
내부에 + 연산자를 사용하는 경우 system.out.println() 괄호를 사용하여 추가를 수행해야 합니다. 덧셈을 수행하기 전에 무언가를 쓰면 문자열 추가가 발생합니다. 즉, 덧셈의 결합성은 왼쪽에서 오른쪽으로 이루어지기 때문에 먼저 문자열을 생성하는 문자열에 정수가 추가되고 +를 사용할 때 문자열 개체가 연결됩니다. 따라서 원치 않는 결과가 발생할 수 있습니다.
자바public class operators { public static void main(String[] args) { int x = 5, y = 8; // concatenates x and y as // first x is added to 'concatenation (x+y) = ' // producing 'concatenation (x+y) = 5' // and then 8 is further concatenated. System.out.println('Concatenation (x+y)= ' + x + y); // addition of x and y System.out.println('Addition (x+y) = ' + (x + y)); } }>
산출Concatenation (x+y)= 58 Addition (x+y) = 13>Java 연산자의 장점
Java에서 연산자를 사용하면 다음과 같은 이점이 있습니다.
- 표현력 : Java의 연산자는 복잡한 계산과 논리 연산을 수행하는 간결하고 읽기 쉬운 방법을 제공합니다.
- 시간 절약: Java의 연산자는 특정 작업을 수행하는 데 필요한 코드 양을 줄여 시간을 절약합니다.
- 향상된 성능 : 연산자를 사용하면 하드웨어 수준에서 구현되는 경우가 많아 동등한 Java 코드보다 속도가 빨라지므로 성능이 향상될 수 있습니다.
Java 연산자의 단점
Java 연산자의 단점은 다음과 같습니다.
- 연산자 우선순위: Java의 연산자에는 정의된 우선순위가 있으므로 올바르게 사용하지 않으면 예상치 못한 결과가 발생할 수 있습니다.
- 유형 강제 : Java는 연산자를 사용할 때 암시적 유형 변환을 수행하므로 올바르게 사용하지 않으면 예기치 않은 결과나 오류가 발생할 수 있습니다.
Java 연산자에 대한 FAQ
1. 예를 들어 Java의 연산자는 무엇입니까?
연산자는 특정 작업을 수행하는 데 사용되는 특수 기호입니다. 예를 들어 '+'는 덧셈에 사용되며 5+4는 값 9를 반환합니다.
