6.6---每天一点点--- Java基础之==和equals区别并举例说明(总复习+深入版)---详细+举例(小白也能看懂)

1.== 为运算符,equal 为String数据类型的比较方法

相同内容的对象地址不一定相同,但相相同地址的对象内容一定相同;== 比较的是值是否相等,equal比较的是是否是同一个对象

2.把对象想象成一个房子,而引用则是门牌号。如果两个引用指向同一个房子,那么它们就是相等的;否则它们就不相等。

使用操作符比较的就是两个门牌号是否相等,即它们是否指向同一个房子。如果两个门牌号相等,则返回true;否则返回false。

而使用equals()方法比较的则是两个房子内部的装修是否一样,即它们在逻辑上是否表示同一件事情。如果两个房子内部装修一样,则equals()返回true;否则返回false。

==操作符比较的是两个对象的引用是否相等,即它们是否指向同一个内存地址;而equals()方法比较的是两个对象内容是否相等,即它们在逻辑上是否表示同一件事情。

==操作符通常用于比较基本类型数据(如int、double、boolean等)或判断两个对象是否为同一个实例;而equals()方法通常用于比较复杂类型数据(如String、Object等)或判断两个对象内容是否相等。

举个例子,假设我们有以下代码:

String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");

System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
System.out.println(str1.equals(str3)); // true

在这段代码中,我们创建了三个字符串对象:str1和str2使用了字面量方式创建,而str3使用了new关键字显式创建。然后我们分别使用==和equals()来比较这三个字符串对象。

第一行输出true,因为str1和str2指向同一个内存地址(常量池中),所以它们的引用相等(即门牌号相同)。

第二行输出false,因为str1和str3指向不同的内存地址(堆内存中),所以它们的引用不相等(即门牌号不同)。

第三行输出true,因为虽然str1和str3引用不同的内存地址(即门牌号不同),但它们表示同一个字符串(内容相等)。

总之,在Java中要正确地比较两个对象是否相等,需要根据具体情况选择合适的方式。对于基本类型数据或判断两个对象是否为同一个实例时可以使用==进行比较;对于复杂类型数据或判断两个对象内容是否相等时应该使用equals()方法来进行比较。

3.操作符比较的是两个对象的引用是否相等,即它们是否指向同一个内存地址。如果两个对象的引用相等,则返回true;否则返回false

String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");

System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false

在这段代码中,我们创建了三个字符串对象:str1和str2使用了字面量方式创建,而str3使用了new关键字显式创建。然后我们分别使用==来比较这三个字符串对象。

第一行输出true,因为str1和str2指向同一个内存地址(常量池中),所以它们的引用相等。

第二行输出false,因为str1和str3指向不同的内存地址(堆内存中),所以它们的引用不相等。

equals()方法比较的是两个对象的内容是否相等,即它们在逻辑上是否表示同一件事情。如果两个对象的内容相等,则equals()返回true;否则返回false。
举个例子,我们可以再看看之前提到过的字符串对象:

String str1 = "hello";
String str3 = new String("hello");

System.out.println(str1.equals(str3)); // true

在这段代码中,我们分别创建了两个字符串对象:str1和str3。虽然它们引用不同的内存地址(一个在常量池中,一个在堆内存中),但是它们表示同一个字符串(内容相等)。因此,在使用equals()方法进行比较时会返回true。

你可能感兴趣的:(知识深入版,java,jvm,开发语言)