字符串比较的相等

Gpa*_*par 1 java string methods equals

我有这个代码,

class  Test{

public static void main(String args[])
{
Boolean a;
Boolean b;
char [] c={'S','t','r','i','n','g'};

a=("String".replace('g','G')=="String".replace('g', 'G')); 
b=("String".replace('g','g')=="String".replace('g', 'g'));

System.out.println("---"+a);
System.out.println("---"+b);
System.out.println(c.toString()=="String");
}
Run Code Online (Sandbox Code Playgroud)

输出是---假 - 真假

我确实通过oracle访问了JLS文档.replace方法:返回一个新字符串,该字符串是用newChar替换此字符串中所有出现的oldChar.如果字符oldChar未出现在此String对象表示的字符序列中,则返回对此String对象的引用.否则,将创建一个新的String对象,该对象表示与此String对象表示的字符序列相同的字符序列,但每次出现的oldChar都会被newChar的出现替换.

当O/p为假时为什么O/p秒为真?

JLS文档说的是toString方法:这个对象(已经是一个字符串!)本身就返回了.那么为什么O/p第三是真的呢?

任何人都可以向我解释一下

在此先感谢GPAR

khe*_*ood 5

"String".replace('g','g')不做任何更改并返回原始字符串.字符串文字都作为单个对象在字符串池中.所以

 "String".replace('g','g')=="String"
Run Code Online (Sandbox Code Playgroud)

这就是你的b布尔值为真的原因.

至于c,你正在调用toString()一个char数组.一个char阵列是不是String..没有任何理由应该返回同一个实例作为另一个String在你的代码.