【发布时间】:2019-02-07 03:24:29
【问题描述】:
由于String是一个对象,所以需要使用string.equals(string)方法来确认两个字符串是否相等。
但是,为什么要使用== 来检查两个字符是否相等,char1 == char2,而不是char1.equals(char2)?
【问题讨论】:
-
char是一个原语,如 int。基元没有方法。
由于String是一个对象,所以需要使用string.equals(string)方法来确认两个字符串是否相等。
但是,为什么要使用== 来检查两个字符是否相等,char1 == char2,而不是char1.equals(char2)?
【问题讨论】:
char 是一个原语,如 int。基元没有方法。
也许,这将有助于理解 == 与 equals 的区别。
@Test
public void testCharacterEquals() {
//primitive type uses == operator for equals comparasion
char a1 = 'A';
char a2 = 'A';
if (a1 == a2) {
System.out.println("primitive type comparasion: it's equal");
}
//From Java doc; The Character class wraps a value of the primitive type char in an object. An object of type Character contains a single field whose type is char.
//Object type uses equals method for equals comparasion
Character character1 = 'A';
Character character2 = 'A';
if (character1.equals(character2)) {
System.out.println("object type comparasion: it's equal");
}
}
【讨论】:
这取决于使用原始类型、char、int 等。以及使用像 String 这样的对象。可以比较像 int 这样的原始类型 1 == 1,如果您将 2 个对象相互检查 ObjectA != ObjectB。
在此处查看此答案:Primitive vs Object type in Java 或者在这里:https://chortle.ccsu.edu/java5/Notes/chap09C/ch09C_2.html
引用:
原始数据类型使用少量内存来表示 单项数据。相同原始类型的所有数据都是相同的 大小。
例如,原始类型 int 表示使用 32 位的整数。全部 int 类型的变量使用 32 位。
Java 中只有八种原始数据类型:byte、short、int、 long、float、double、char 和 boolean。 Java 程序无法定义 任何其他原始数据类型。
对象是一大块内存,可能包含一个 大量数据以及处理方法(小程序) 那个数据。有成千上万的标准对象类 使用 Java,程序员可以轻松地创建其他类。 (虽然有上千个标准课,但是对于这门课你 只需要熟悉十几个类。)
其中 2 个字符串是 2 个不同的对象。因此不是同一个对象,也不是同一个字符串。虽然字符可能相同。
【讨论】:
基本上,Java 有原始类型(int、char、short、long、byte ....) 和参考数据类型/由其他原语和对象组成的对象。
equals() 是所有 Java 对象的方法。但是 char 在 Java 中不是 Object 类型,它是一种原始类型,它没有任何方法或属性,因此要检查相等性,只需使用 == 等于运算符即可。
【讨论】:
如果需要,您也可以使用比较器。
public static boolean compareChars(char c1, char c2){
int comp = Character.compare(c1, c2);
if(comp>0){
return false;
}else{
return true;
}
}
public static void main (){
boolean b1 = compareChars('A', 'A') //return true;
boolean b2 = compareChars('A', 'C') //return false;
}
【讨论】:
因为char 是一个原始类型并且没有实现equals,所以== 在这种情况下直接比较char 的值,而String 是一个对象。因此,对于对象比较,相等运算符应用于对象的引用,而不是它们指向的对象。两个引用相等当且仅当它们指向同一个对象,或者都指向 null。
如果你想比较字符串(看它们是否包含相同的字符),你需要使用equals()来比较字符串。
因此,运算符== 检查原始类型的值是否相等,但它检查对象的引用是否相等。如果两个对象被相等的引用引用,那么Java中的引用和对象是不同的。
【讨论】: