String:== 和 equals

Ju
Jul 13, 2023

--

public class Main {
public static void main(String[] args) {
String a = "sample";
String b = "sample";
System.out.print(a == b);
System.out.print(",");
System.out.println(a.equals(b));
}
}

输出结果为:「true,true」

解释如下:
- 第3行和第4行创建了两个字符串对象`a`和`b`,它们的值都是”sample”。在Java中,编译器会对字符串字面值进行优化,将相同的字符串常量引用同一个对象。(字符串常量是指在代码中直接使用双引号括起来的固定字符串值)
- 第5行使用`==`运算符比较了`a`和`b`的引用是否相等。由于相同的字符串常量被优化成同一个对象,所以`a`和`b`引用同一个对象,返回`true`。
- 第6行打印了一个逗号。
- 第7行使用`equals()`方法比较了`a`和`b`的内容是否相等。由于`a`和`b`的值都是”sample”,所以返回`true`。
- 输出结果为「true,true」。

在Java中,使用`==`运算符比较两个对象引用时,会比较它们的地址是否相等。以下是一些情况下会比较对象地址的示例:

1. 对于基本数据类型(如`int`、`float`、`boolean`等),使用`==`比较时会比较它们的值是否相等。

2. 对于对象类型(如字符串、自定义类等),使用`==`比较时会比较它们的引用地址是否相等。这意味着只有当两个引用指向同一个对象时,比较结果才为`true`。

3. 对于字符串常量,在Java中会被放入字符串常量池中,相同的字符串常量会被优化为同一个对象。因此,当使用`==`比较两个相同的字符串常量时,比较结果为`true`。

4. 对于通过`new`关键字创建的对象,即使内容相同,它们仍然是不同的对象,因此使用`==`比较时比较结果为`false`。

需要注意的是,对于比较对象的内容是否相等,应该使用`equals()`方法,而不是`==`运算符。`equals()`方法比较的是对象的内容,具体的比较规则由对象类的实现决定。

--

--

Ju
Ju

No responses yet