연산자로 Java 표현식 평가

Java 애플리케이션 은 리터럴, 메소드 호출, 변수 이름 및 연산자의 조합 인 표현식 을 평가하여 데이터를 처리합니다 . 표현식을 평가하면 일반적으로 새 값이 생성되며,이 값은 변수에 저장 될 수 있고 결정을 내리는 데 사용됩니다.

이 자습서에서는 Java 프로그램에 대한 표현식을 작성하는 방법을 배웁니다. 대부분의 경우 연산자를 사용하여 Java 표현식을 작성 하고 사용 방법을 알 수 있는 여러 유형의 연산자 가 있습니다. Java의 연산자 유형 (덧셈, 비트, 논리, 조건부, 시프트 및 같음 유형 포함)과 해당 피연산자를 간략하게 소개합니다. 또한 연산자 오버로딩 및 연산자 우선 순위와 같은 중요한 개념에 대해 배우고 기본 형식 변환의 데모를 볼 수 있습니다. 혼자서 원시 유형 변환을 연습하는 데 사용할 수있는 작은 Java 프로그램으로 마무리하겠습니다.

다운로드 코드 받기이 자습서에서 예제 응용 프로그램의 소스 코드를 다운로드합니다. JavaWorld를 위해 Jeff Friesen이 만들었습니다.

간단한 표현

간단한 표현식 리터럴, 변수 이름 또는 메소드 호출이다. 운영자가 관여하지 않습니다. 다음은 간단한 표현식의 몇 가지 예입니다.

52 // integer literal age // variable name System.out.println("ABC"); // method call "Java" // string literal 98.6D // double precision floating-point literal 89L // long integer literal

간단한 식은 갖는 유형 중 기본 유형 또는 참조 유형이다. 이 예에서은 5232 비트 정수 ( int)입니다. 값을 반환하지 않기 때문에 System.out.println("ABC");void ( void)입니다. "Java"문자열 ( String)입니다. 98.6D64 비트 배정 밀도 부동 소수점 값 ( double)입니다. 및 89L64 비트 길이의 정수이다 ( long). 우리는 age의 유형을 모릅니다 .

jshell 실험

를 사용하여 이러한 표현과 기타 간단한 표현을 쉽게 시도 할 수 있습니다 jshell. 예를 들어 프롬프트 52에서 입력 jshell>하면 다음과 같은 출력이 표시됩니다.

$1 ==> 52

$1(A)의 이름 스크래치 변수jshell 저장을 생성 52. (리터럴을 입력 할 때마다 스크래치 변수가 생성됩니다.) 실행 하면 출력으로 System.out.println($1)표시 52됩니다.

당신은 실행할 수 있습니다 jshell-v명령 줄 인수 ( jshell -v피드백 자세한 정보 생성). 이 경우 입력 52하면 스크래치 변수 $1int(32 비트 정수) 유형 이 있음을 나타내는 다음 메시지가 표시 됩니다.

| created scratch variable $1 : int

다음으로 입력 해보십시오 age. 이 경우 기호를 찾을 수 없다는 오류 메시지가 표시 될 수 있습니다. Java Shell age은 이것이 변수 라고 가정 하지만 그 유형을 모릅니다. 유형을 포함해야합니다. 예를 들어를 입력하면 어떻게되는지 확인하십시오 int age.

복합 표현식

화합물 식 통해 큰 식으로 통합하는 하나 이상의 간단한 식으로 구성 연산자 상징적으로 소스 코드로 나타낸 일련의 명령이다. 연산자는 표현식 피연산자 를 다른 값으로 변환 합니다. 예를 들면, 6 * 5승산 연산자 ( *) 변환 피연산자 6530로.

복합 표현식은 더 큰 표현식으로 결합 될 수 있습니다. 예를 들어, 6 * 5 + 106 * 5곱, 더하기 연산자 +및 숫자 로 구성된 복합 표현식 및 복합 표현식을 표시 10합니다. 평가 순서 (먼저 곱한 다음 더하기)는 Java의 우선 순위 규칙에 따라 결정됩니다 . 곧 다룰 것입니다.

복합 표현식도 간단 할 수 있습니다.

6 * 5두 간단한 식으로 구성되는 화합물 식이고, 6그리고 5. 하지만 의 관점에서 보면 6 * 5단순한 표현이기도하다 +. +운영자는 간단한 표현이다 그들의 제품 (30)을 본다.

연산자와 피연산자

Java의 연산자는 피연산자 수에 따라 분류됩니다.

  • 단항 연산자는 예를 들어, 하나의 피연산자를 갖는 단항 (예 -5).
  • 이진 연산자는 두 개의 피연산자를 가지고 실시 예는 곱셈 부가된다.
  • 삼원 연산자 세 피연산자를 갖는다; 예를 들어 조건부 연산자 ( ?:)가 있습니다.

Java 연산자도 위치별로 분류됩니다.

  • 프리픽스 연산자 는 피연산자 (예를 들어, 선행 단항 연산자이다 -5).
  • 후위 연산자 (예를 들어, 피연산자 다음 단항 연산자 age++;- 1 추가 age의 수치 값).
  • 중위 오퍼레이터는 오퍼레이터의 피연산자 (예를 들어, 사이 이진 삼원 연산자이다 age + 5).

또 다른 jshell 예제

다음 섹션에서 더 많은 연산자를 소개 할 것입니다. 여기서 응용 프로그램 형식으로 예제를 제공합니다. 다음과 jshell같이으로 이러한 연산자를 사용해 볼 수도 있습니다 .

jshell> 6 + 2 $1 ==> 8 jshell> 7 * $1 $2 ==> 56

이 경우 먼저 결과 8을 스크래치 변수에 할당하여 평가 6 + 2하는 expression을 입력 jshell합니다 $1. 다음으로 곱 $1함으로써 7, 스크래치되는 변수에 저장한다 (56) $2. 이 예제는 Java 표현식에서 스크래치 변수를 사용할 수 있음을 보여줍니다.

오버로드 된 연산자

더하기 (+) 연산자는 피연산자 유형 에 따라 여러 연산 중 하나를 수행하는 연산자 인 오버로드 된 연산자 의 예입니다 . 더하기 연산자는 두 피연산자가 정수이면 정수 더하기, 두 피연산자가 모두 부동 소수점 값이면 부동 소수점 더하기, 두 피연산자가 모두 문자열이면 문자열 연결을 수행합니다. 빼기 (-) 연산자도 오버로드되어 정수 또는 부동 소수점 빼기를 수행합니다.

Java의 연산자 유형

가산 연산자

첨가제 사업자 증가 또는 덧셈과 뺄셈을 통해 숫자 값을 감소시킨다. 더하기 연산자에는 더하기 ( +), 빼기 ( -), 사후 감소 ( --), 사후 증가 ( ++), 사전 감소 ( --) 및 사전 증가 ( ++)가 있습니다. 문자열 연결 ( +)도 추가로 간주됩니다. 다음은 이러한 각 연산자에 대한 공식적인 정의입니다.

  • 추가 : 감안할 때 , 각 피연산자는 문자 또는 숫자 유형이어야합니다, 추가 로 와 합을 반환합니다. 예 : .operand1 + operand2operand2operand14 + 6
  • 빼기 : 주어진 경우 각 피연산자는 문자 또는 숫자 유형이어야하며 차액 에서 빼고 반환합니다. 예 : .operand1 - operand2operand2operand14 - 6
  • Postdecrement: Given variable--, where variable must be of character or numeric type, subtract 1 from variable's value (storing the result in variable) and return the original value. Example: x--;.
  • Postincrement: Given variable++, where variable must be of character or numeric type, add 1 to variable's value (storing the result in variable) and return the original value. Example: x++;.
  • Predecrement: Given --variable, where variable must be of character or numeric type, subtract 1 from its value, store the result in variable, and return the new decremented value. Example: --x;.
  • Preincrement: Given ++variable, where variable must be of character or numeric type, add 1 to its value, store the result in variable, and return the new incremented value. Example: ++x;.
  • String concatenation: Given operand1 + operand2, where at least one operand is of String type, append operand2's string representation to operand1's string representation and return the result. Example: "A" + "B".

The addition, subtraction, postdecrement, postincrement, predecrement, and preincrement operators can generate values that overflow the limits of the result type. For example, adding two large positive 64-bit integer values can produce a value that cannot be represented in 64 bits. The resulting overflow is not detected or reported by Java's additive operators.

Overflow detection in the Java standard class library

The standard class library's Math class includes methods for detecting overflows. For example, int addExact(int x, int y) adds the values in x and y, returning the sum or throwing an exception on overflow.

Example application: Additive operators

Listing 1 presents a small application for playing with Java's additive operators.

Listing 1. Additive operators in Java (AddOp.java)

class AddOp { public static void main(String[] args) { System.out.println(125 + 463); System.out.println(2.0 - 6.3); int age = 65; System.out.println(age); System.out.println(age--); System.out.println(age++); System.out.println(--age); System.out.println(++age); System.out.println("A" + "B"); } }

You learned in the previous tutorial how to use the JDK's javac tool to compile Java source code and the java tool to run the resulting application. Execute the following command to compile Listing 1:

javac AddOp.java

Assuming successful compilation, you should observe an AddOp.class file in the current directory. Execute the following command to run it:

java AddOp

AddOp responds by producing the following output:

588 -4.3 65 65 64 64 65 AB

Studying this output offers insight into the postincrement, postdecrement, preincrement, and predecrement operators. For postincrement/postdecrement, age's current value is output before the increment/decrement operation. For preincrement/predecrement, the operation is performed and its result is stored in age, and then age's new value is output.

Iterating with Java operators

The additive operators are especially useful in the context of an iteration statement, where they are used to advance to the next iteration. You'll learn about iteration statements in the next Java 101 tutorial.

Array index operator

The array index operator ([]) accesses an array element by providing the element's index (position). This operator is placed after the array variable's name, as in grades[0] (access the first element in the array assigned to grades; the first element is stored at index 0). Here's a formal definition:

Given variable[index], where index must be of integer (int) type, read a value from or store a value into variable's storage element at location index. Example: temperatures[1]

The value passed to index is a 32-bit integer that is either 0 or a positive value ranging to one less than the array's length, which is indicated by appending .length to the name of the array. For example, grades.length returns the number of elements in the array assigned to grades.

Array variables vs arrays

grades is not an array, but is a variable containing a reference to a region of memory that forms the array. This is true for all Java arrays. However, it's conventional to refer to grades or any array variable as an array.

Example application: Array index operator

Listing 2 presents the source code to an example application that lets you play with the array index operator.

Listing 2. Array index operator in Java (ArrayIndexOp.java)

class ArrayIndexOp { public static void main(String[] args) { int[] grades = { 89, 90, 68, 73, 79 }; System.out.println(grades[1]); grades[1] = 91; System.out.println(grades[1]); int index = 4; System.out.println(grades[index]); System.out.println(grades['C' - 'A']); // System.out.println(grades[1D]); } }

Listing 2 is somewhat more interesting than Listing 1. After creating a five-element, one-dimensional array of integers (via an array initializer) and assigning the array's reference to grades, main() proceeds to access various elements. Two items are of special interest:

  • The array index operator's index must ultimately be a 32-bit integer (0 or a positive value). You can specify the name of an integer variable (e.g., index), which contains the index value, as the index.
  • You can specify a calculation involving character literals. (Later in this tutorial I'll introduce type conversions, and you'll discover why 'C' - 'A' produces an integer (2), which serves as a valid index.)

The final example, which passes 1D as an index to the array index operator, is commented out because it will not compile. If you uncomment the line and attempt to compile Listing 2, you will receive an error message about incompatible types: "possible lossy conversion from double to int.."

Compile Listing 2 (javac ArrayIndexOp.java) and run the application (java ArrayIndexOp). You should observe the following output:

90 91 79 68

The array index operator and multidimensional arrays

You can use this operator with multidimensional arrays. For example, assuming a two-dimensional costs array, costs[0][1] accesses the element assigned to the first row (via [0]) and the second column (via [1]).

Assignment operators

The assignment operator (=) assigns an expression's value to a variable (e.g., i = 6;), including an array element (e.g., x[0] = 15;). The expression and variable must be assignment compatible, meaning their types must agree. For example, you cannot assign a string literal to an integer variable. I'll explain more about this when we discuss type conversions.

복합 할당 연산자 ( +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, >>>=)는 식을 평가하고 한 단계의 변수에 결과를 할당합니다. 각 식과 변수는 할당이 호환되어야합니다. 각 연산자는 유용한 단축키 역할을합니다. 예를 들어를 지정하는 대신 x = x + 3;더 짧고 동등한을 지정할 수 있습니다 x += 3;.

짧게 유지하세요!

x = x + 1;또는 을 지정하는 대신 x = x - 1;더 짧은 x += 1;또는을 지정할 수 x -= 1;있습니다. 당신은 절약 할 수 짧은 지정하여 키 입력을 x++;또는 x--;.

비트 연산자