++a++
가 추가 괄호 강조 3 개로 이루어져 식 : (++(a))++
:
자바 독 말한다 :
가
[X] 숫자 타입, 또는 오류가 발생 컴파일시에 전환하는 타입 (§5.1.8)의 변수이어야한다. [...] [접두사/접미사] 증분 표현 의 결과은 변수가 아니며 값은입니다.a
변수이지만, 때문에
그래서, 당신의 표현 ++a
작품, 결과가 값, 그래서 (++a)++
이 작동하지 않습니다.
a+++++b
그것이
((a++)++)+b
로 컴파일러에 의해 해석되기 때문에 작동하고, 우리가 배운대로,
X++
변수를 필요로하지 않습니다.
Java 토큰 화가가 유효한 연산자를 형성하기 위해 최대한 많은 연속 문자를 사용하기 때문에이 방법으로 구문 분석됩니다.
이제 공백이나 괄호를 추가하면 해당 표현식의 의도에 따라 작동 할 수 있습니다. 다음은 모두 동일합니다
(a++)+(++b)
a+++(++b)
a++ + ++b
a+++ ++b
표현 someObject.methodReturnsInteger().getClass()
은 "method chaining"로 알려져있다.
.
는 왼쪽 연관 method invocation 운영자이며, .
의 왼쪽에있는 값은 단지 객체 일 (정적 메소드 호출 또는 클래스 만의 그를 건너 뛸)하기 때문에이 작동합니다.
그래서 표현은 다음과 같이 해석한다 :
(someObject . methodReturnsInteger()) . getClass()
첫 번째 .
작품을 someObject
객체이기 때문이다. 두 번째 .
은 괄호로 묶인 표현식의 결과가 개체이기 때문에 작동합니다.
메서드 체이닝은 매우 일반적이며 builder pattern을 사용할 때 매우 좋습니다.
String s = new StringBuilder()
.append("Hello ")
.append(person.getFirstName())
.append(", please say hello to your father, ")
.append(person.getFather().getFirstName())
.append(".")
.toString();
@SotiriosDelimanolis @SotiriosDelimanolis는 '정수'참조로 변환되기 전에 32 비트 정수량 인 'int'입니다. 이것은 'Object'가 아닌 원시 타입입니다. Java는'int'를'Integer' 객체와 자동으로 변환하는 경우가 많습니다. 대부분 객체가 더 잘 작동하도록 만듭니다. 참조 : https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html –
@SotiriosDelimanolis, Ah, 사실입니다. 다른 종류의 암시 적 캐스트없이 시도하지 않았습니다. 나는 그 부분을 제거 할 것이다. –