자바 의 구덩이 들 (1)
8369 단어 자바
/**
* Compares this string to the specified object. The result is {@code
* true} if and only if the argument is not {@code null} and is a {@code
* String} object that represents the same sequence of characters as this
* object.
*
* @param anObject
* The object to compare this {@code String} against
*
* @return {@code true} if the given object represents a {@code String}
* equivalent to this string, {@code false} otherwise
*
* @see #compareTo(String)
* @see #equalsIgnoreCase(String)
*/
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
기본 값 은 대상 의 주소 가 같은 지 비교 하 는 것 입 니 다. String 유형 은 대상 의 내용 이 같은 지 비교 할 수 있 습 니 다. equals 와 hashcode 는 하위 클래스 가 다시 쓸 수 있 는 방법 입 니 다. 하위 클래스 는 자신의 구체 적 인 업무 에 따라 업무 의 수 요 를 재 작성 할 수 있 습 니 다.String 형식의 데 이 터 는 jvm 컴 파일 시 최적화 문제 와 관련 됩 니 다. 예 를 들 어 다음 과 같 습 니 다.
package com.sparkhuu.base;
public class StringTest {
public static void main(String[] args) {
String s1 = "a" + "b" + 1; // :"ab1"
String s2 = "ab1";
// == , , ,
System.out.println(s1 == s2);
// equals , ,String equals
System.out.println(s1.equals(s2));
String a = "1";
final String testA = "1";
String b = a + "2" + 3; // b,c , b,c String equals
String c = "123";
String testB = testA + "2" + 3;
System.out.println(testB == c);
System.out.println(testB.equals(c));
System.out.println(b == c);
System.out.println(b.equals(c));
String eString = "a";
String fString = eString + "b";
String gString = "ab";
String hString = new String(gString);// new
System.out.println(fString == gString);
System.out.println(hString == gString);
System.out.println(hString.intern() == gString.intern());
}
}
결과
true
true
true
true
false
true
false
false
true
2, 기본 데이터 형식의 패 키 징 클래스 int – > Integer char – > Character double – > Double 등 은 패 키 징 과 패 키 지 를 뜯 는 테스트 와 관련 됩 니 다.
package com.sparkhuu.base;
public class BaseNumberTest {
public static void main(String[] args) {
Integer a = 1;
Integer b = 1;
Integer e = -127;
Integer f = -127;
// Integer.valueOf(); [-128 127] cache new Integer()
Integer c = 200;
Integer d = 200;
System.out.println(a == b);
System.out.println(e == f);
System.out.println(c == d);
char x = ' ';
char x1 = 'a';
byte y = 'a';
Boolean tr = true;
Boolean shBoolean = true;
System.out.println(tr == shBoolean);
}
}
결과
true
true
false
true
주요 원인 은 기본 데이터 형식 이 패 키 징 류 로 바 뀔 때 패 키 징 류 의 init 를 호출 하고 패 키 징 류 의 일부 코드 는 cache, Integer, Short, Long 의 cache 범 위 는 - 128 에서 127 이 며 그 중에서 Integer 는 설정 을 통 해 범 위 를 수정 할 수 있 으 며 Short 와 Long 은 안 되 기 때문이다.Boolean 의 cache 범 위 는 true, false, Characher 모든 캐 시 Double 이 고 Float 에는 캐 시 가 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.