자바 상용 문법 사탕 깊이 이해
13615 단어 자바
글 목록
String str = "awecoder";
switch (str) {
case "awecoder":
System.out.println(str);
break;
default:
System.out.println("other");
}
Jad 역 컴 파일 후
String str = "awecoder";
String s = str;
byte byte0 = -1;
switch(s.hashCode())
{
case -1520954730:
if(s.equals("awecoder"))
byte0 = 0;
break;
}
switch(byte0)
{
case 0: // '\0'
System.out.println(str);
break;
default:
System.out.println("other");
break;
}
코드 에서 보 듯 이 switch(String)는 hashCode()와 equals()방법 을 조합 하여 이 루어 졌 다.문자열 대상 의 해시 값 을 switch 작업 을 하고 내부 에서 equals 방법 을 사용 하여 해시 충돌 을 피 합 니 다.hashCode 방법 은 int 형식 을 되 돌려 줍 니 다.새로운 jdk 버 전(1.8.0221)역 컴 파일 결 과 는 많은 블 로그 와 달리 두 번 째 byte 에 대한 switch 작업 에 나타난다.
switch 는 JDK 1.5 에 포장 유형 에 대한 지원 을 추가 합 니 다.JVM 은 컴 파일 할 때 상 자 를 뜯 는 작업 을 합 니 다.매 거 진 종 류 는 매 거 진 종류의 ordinal 방법 으로 int 형식 을 되 돌려 줍 니 다.종합 적 으로 swthich 는 기본 데이터 형식 만 지원 합 니 다.
[문제]swthich(String)와 swthich(Integer)두 개의 작은 사례 를 동시에 실행 할 때 jad 컴 파일 코드 는 다음 과 같은 몇 마디 가 있 습 니 다.
String str = "awecoder";
Integer integer = str; // str integer
switch(integer.hashCode()) {...}
2.범 형
자바 컴 파일 러 는 범 형 을 처리 할 때 코드 공유 방식 으로 모든 범 형 유형 에 유일한 바이트 코드 를 만 듭 니 다.형식 지우 기 방식 을 통 해 일반적인 형식 에서 유일한 바이트 코드 에 대한 맵 을 실현 합 니 다.
형식 지우 기 작업 과정 은 모든 일반적인 파 라 메 터 를 가장 왼쪽 경계 형식 으로 바 꾸 고 모든 유형의 파 라 메 터 를 제거 하 는 것 입 니 다.예 를 들 어
List
범 형 유형 은 역 컴 파일 후의 코드 는List
이다.Class c1 = new ArrayList<String>().getClass();
Class c2 = new ArrayList<Integer>().getClass();
System.out.println(c1 == c2); // true
일반적인 코드 내부 에 서 는 일반적인 유형의 매개 변수 정 보 를 얻 을 수 없습니다.사례 에서 c1 과 c2 가 얻 은 바이트 코드 는 완전히 같 습 니 다.역 컴 파일 을 통 해 우 리 는
get
그 중의 원인c1
과c2
이 부 여 된 값 은 모두((new ArrayList()).getClass()
입 니 다.3.자동 분해 포장
자바 는 완전히 대상 을 대상 으로 하 는 언어 가 아니 라 8 가지 기본 데이터 형식 이 존재 합 니 다.대상 이 아 닙 니 다.new 를 통 해 변 수 를 만 들 필요 가 없습니다.변 수 는 스 택 에 직접 저장 합 니 다.자바 는 이러한 데이터 형식 을 더욱 잘 사용 하기 위해 각각 포장 류 를 제공 했다.포장 을 뜯 는 것 은 기본 데이터 유형 과 대상 간 의 전환 을 실현 하 는 것 이다.
Integer i = 42;
Integer i = Integer.valueOf(42);
4.방법 이 길 어 지 는 매개 변수
호출 방법 에 대한 실 참 은 가 변 적 인 매개 변수 의 실제 매개 변수 에 따라 주어진 유형의 배열 을 만 들 고 배열 을 진정한 실 참 으로 호출 방법 에 전달 합 니 다.
method(42, "awe","coder");
public static void method(int i, String...strs) {}
method(42, new String[] {
"awe", "coder"
});
public static transient void method(int j, String as[]){}
기타 문법 설탕:for-each/매 거/내부 클래스/컴 파일 시 최적화/try-with-resource
매 거:매 거
enum
에 대해 서 는 새로운 유형 이 아니 라 키워드 입 니 다.매 거 진 클래스 에 대해 우 리 는 역 컴 파일 을 통 해 알 수 있 듯 이 매 거 진 클래스 는 사실 계승Enum
류 의 불가 변 류 를 만 들 었 다.public static final class t extends Enum
내부 클래스:컴 파일 할 때의 개념 입 니 다.컴 파일 에 성공 하면 외부 클래스 와 내부 클래스 의 여러 바이트 파일 을 생 성 합 니 다.예 를 들 어 위의 내부 매 거 진 류 는 컴 파일 한 후에
Test.clas
s 와Test$t.class
파일 을 얻 을 수 있다.컴 파일 시 최적화:JVM 은 컴 파일 할 때 최적화 할 수 있 는 부분,예 를 들 어 상수 등 을 최적화 합 니 다.다음 예 에서 i 가 final 수식 이 없 으 면 일반 변수 일 뿐 JVM 은 이 최 적 화 를 하지 않 습 니 다.
final int i = 1;
int j = i + 1;
int i = 1;
int j = 2;
다른 컴 파일 시 최 적 화 된 예 는 조건 컴 파일 이다.예 에서 조건 부 문 구 는 JVM 에 의 해 컴 파일 되 지 않 습 니 다.마찬가지 로 여기 서도 상수 가 필요 합 니 다.
final boolean b = false;
if (b) {
System.out.println("Hello, b!");
}
boolean b = false;
for-each:그 내 부 는 여전히 일반 for 순환 과 교체 기 를 사용 하여 옮 겨 다 닙 니 다.
try-with-resource 는 JDK 1.7 에 추 가 된 기능 으로 코드 가 더욱 우아 하 게 자원 을 닫 는 데 사용 된다.
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.