java字符串比较的问题,总是弄不明白

来源:百度知道 编辑:UC知道 时间:2024/07/04 11:56:36
是这样的,
public static void main(String args[]){
String s1="abc";
String s2="ab";
String s3="c";
String s4=s2+s3;
System.out.println(s1==s4);//这里打印出false
/*String s1="abc";
String s2="ab"+"c";
System.out.println(s1==s2);//这样就是true*/

}
这里究竟是怎么回事?希望得到准确的解释,如果解释清楚了会给分的,谢谢!
感谢这么多热心人!
我不解的地方就是这里:
String s4=s2+s3;这里创建了一个新的字符串对象吗?在哪里创建的呢?
String s2="ab"+"c";这里的"ab"、"c"是存放在哪里的?

==是比较值和地址是否相等的。

s4指向s2和s3所对应的地址,跟s1没有关系,s1单独有个地址来存放它。s4和s1只是值相同,地址并不同,所以结果是false.

而String s2="ab"+"c";首先给s2复值为abc,然后在内存中寻找,看有没有存放值为"abc"的地址,会找到存放s1的地址,那么s2将和s1公用这个地址。此时再比较s1==s2的话,它们的值和地址都相同,所以结果是true。

首先==号是比较两个对象的内存地址。
String s4=s2+s3;
这是把s4指向s2和s3,而s1和他们根本不相关.所以为false;

String s2="ab"+"c";
这和String s2="abc";性质一样.
所以之前已经有s1="abc";,所以这里直接让s2也指向了s1;所以为true;

对于String对象来说,比较内容是否想同,请用equals(),在忽略大小字时用equalsIgnoreCase().

== 比较的物理地址,即是内存所在的地址。对于内存来说,有两块,堆和栈。堆是交给程序员全全控制的,而栈是由机器控制的,目的就是为了可重用性。

String s1 = 'abc';其实是在堆区建了一个s1 ,然后去栈区找'abc',如果已经存在'abc'了,就让s1指向'abc'所在的地址,如果找不到,则机器会在栈区建立一个'abc',再让s1指向'abc'所在的地址,虽然java没有指针,这个机制和指针有点像。

String s1 = 'abc';String s2 = "ab"+"c";s1和s2指向的是同一个地址。这点很好理解的吧。当String s2 = "ab"+"c";的时候,发现要栈区里已存在'ab