1. 표현 대 진술

Java에서는 명령문표현식 이라는 두 범주를 구분하는 것이 유용합니다 . 명령문은 일반적으로 실행 된다고 하며 표현식은 평가 된다고 합니다 . 그러나 그것은 가장 중요한 것이 아닙니다.

명령문과 표현식의 주요 차이점은 표현식을 평가하면 결과가 나온다는 것입니다 . 그리고 이 결과에는 유형이 있으며 변수에 할당하거나 다른 표현식에 사용할 수 있습니다.

예:

암호 노트
int x; 성명
(a < 10) 유형이 다음과 같은 표현식boolean
i++; i타입이 변수 의 타입과 동일한 표현식
x = 5; x타입이 변수 의 타입과 동일한 표현식

그리고 이것은 우리에게 무엇을 제공합니까?

첫째, 우리는 많은 문장이 실제로는 표현식이라는 사실을 이용할 수 있습니다(즉, 값으로 평가된다는 의미). 예를 들어 다음과 같은 코드가 작동합니다.

암호 노트
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1))

둘째, 원하는 경우 식 평가 결과를 무시할 수 있습니다.

암호 결과를 무시하는 코드:
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

예를 들어, 표현식이 유용한 작업을 수행하는 경우 표현식을 평가한 결과를 무시하고 결과 자체가 아니라 이 조치가 우리에게 중요합니다.


2. 삼항 연산자

이 인생 해킹은 이미 이전 것보다 더 흥미 롭습니다. Java에는 특별한 삼항 연산자가 있습니다 . 그 구문은 문의 구문과 어느 정도 유사합니다 if-else.

Condition ? Expression 1 : Expression 2;

조건 이 참이면 표현식 1이 평가되고 그렇지 않으면 표현식 2 가 평가됩니다. 조건 다음에는 물음표가 오고 두 식은 콜론 으로 구분됩니다 .

삼항 연산자 와 명령문 의 주요 차이점은 if-else삼항 연산자가 식이라는 것입니다. 즉, 결과를 무언가에 할당할 수 있습니다.

예를 들어 두 숫자의 최소값을 계산한다고 가정합니다. 삼항 연산자를 사용하면 이 코드는 다음과 같습니다.

int a = 2;
int b = 3;
int min = a < b ?  a : b;

또는 어떤 조건에 따라 변수에 다른 값을 할당해야 한다고 가정해 보겠습니다. 어떻게 합니까?

한 가지 옵션은 명령문을 사용하는 것입니다 if-else.

int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;

두 번째 옵션은 삼항 연산자를 사용하는 것 입니다if-else .

int age = 25;
int money = age > 30 ? 100 : 50;

그렇다면 if-else문장과 삼항 연산자 중 어느 것을 사용하는 것이 더 좋을까요 ? 실행 속도 면에서는 큰 차이가 없습니다. 이것은 코드 가독성의 문제입니다. 그리고 이것은 매우 중요한 점입니다. 코드는 올바르게 작동해야 할 뿐만 아니라 다른 프로그래머가 쉽게 읽을 수 있어야 합니다.

가장 간단한 규칙은 다음과 같습니다. 코드가 한 줄에 맞으면 삼항 연산자를 사용합니다 . 그러나 한 줄에 맞지 않으면 문을 사용하는 것이 좋습니다 if-else.



3. 실수 비교

앞에서 언급했듯이 실제 숫자를 가져와서 비교할 수는 없습니다. 일부 유효 숫자가 삭제되어 예기치 않은 부작용이 발생할 가능성이 항상 있습니다.

그렇기 때문에 시간 테스트를 거친 접근 방식이 있습니다. 두 개의 실수가 매우 작은 값만큼 다른 경우 동일한 것으로 간주할 수 있습니다. 예:

double a = 1.000001;
double b = 1.000002;
if ( (b - a) < 0.0001 )
   System.out.println("The numbers are equal");
else
   System.out.println("The numbers are not equal");

그러나 숫자의 차이가 음수로 판명될 수 있으므로 걱정할 필요는 없습니다. 따라서 이 접근 방식이 작동하려면 숫자 간의 차이뿐만 아니라 숫자 간의 차이의 절대값을 비교해야 합니다.|a-b|

Java에는 숫자의 절대값을 계산하는 방법이 있습니다 Math.abs().

int m = Math.abs(value);

결과적으로 위 예제의 수정된 버전은 다음과 같습니다.

double a = 1.000001;
double b = 1.000002;

if ( Math.abs(b - a) < 0.0001 )
   System.out.println("The numbers are equal");
else
   System.out.println("The numbers are not equal");