文字列型の違い「==」と比較し、「等しいです」
-
まずString型の変数を作成する方法を説明
あなたはString型の新しい変数を作成すると、バッファは最初に対応するオブジェクトが、この生産であるかどうかを見ていきます、直接、見つかったオブジェクトがないように、新しく作成された変数に割り当てられているが対処しますオブジェクトおよび割り当てを再作成します新しく作成された変数
String str = "str";//创建一个新的String类型的变量,在已有的缓冲区中没有就重新创建一个
String str1 = "str";//创建时在缓冲区发现有和即将创建的值一样的对象,就将str的地址赋给str1
str == str1;//true
String str2 = new String("str");//强制创建一个对象str2,地址和str,str1不同
str2 == str;//false因为==比较的是对象的地址,而二者地址不同,故为false
str2 == str1;//false同上
str2.equals(str1);//true String继承Object方法中的equals方法进行重写,内部比较是两个String类型的字符串一个一个字符的比较(下边是源码)
str2.eauals(str);//true同上
public boolean equals(Object anObject) {//String类中equals源码
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;
}
-
の「==」と「対等」の他のタイプと比較すると
すべてのクラスはObjectクラスは、Objectクラスは、equalsメソッドを継承しており、以下のソース
public boolean equals(Object obj) { return (this == obj); }
「==」の比較は、その後、あなたはequalsメソッドをオーバーライドする必要はなく、より多くの価値、より多くの価値よりも、オブジェクト参照平等のアドレスです
「==」のために使用される基本的なデータ型のみ、比較は2つの基本タイプの値であり、