java字符串==比较的是本身地址还是指向地址?

String a = “hello”;
String b = “hello”;
这里的a,b都指向同一个地址。那a与b本身自己也有地址的吧,也就是说a==b比较的是指向的地址,并不是a,b自己的地址,是不是这么理解的?

讨论数量: 2

在 Java 中,使用 == 进行字符串比较时,比较的是两个字符串对象本身的地址是否相同,而不是它们所指向的地址。换句话说,对于 String 对象来说,只有在它们的地址相同时,== 操作符才会返回 true。

这种行为与其他数据类型不同。对于基本数据类型(例如 int 或 double),使用 == 比较两个变量时,比较的是它们的值是否相等。但对于引用类型,== 会比较它们所占用的内存地址。

这是因为在 Java 中,每个创建的字符串对象都会被存储在堆内存中,并具有唯一的内存地址。因此,在比较两个字符串时,如果它们所指向的地址不同,则 == 操作符会返回 false。

需要注意的是,在实际编程中,我们通常使用 equals() 方法来比较字符串的内容是否相等,而不是使用 == 操作符。这是因为 equals() 方法比较的是字符串的内容,而不关心它们的内存地址。

String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
System.out.println(s1 == s2); // 输出 true
System.out.println(s1 == s3); // 输出 false
System.out.println(s1.equals(s3)); // 输出 true
11个月前 评论
bluememory (楼主) 11个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!