j**a中的字符串相加

时间:2013.07.03 发布人:lkathy

j**a中的字符串相加

已解决问题

谷歌lkathy用户在2013.07.03提交了关于“柳江古镇j**a中的字符串相加”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-11-14T12:44:43。下面是一段代码以及运行结果:请对结果给予解释
publicclassStringAndStringBuffer
{

publicstaticvoidmain(String[]args)
{
/*
Strings1="a";
Strings2="b";
Strings3="ab";
System.out.println(s3==s1+s2);
System.out.println(s3=="a"+"b");
*/
/*============================RESULT==============================
--------------------Configuration:<Default>--------------------
false
true

Processcompleted.

=================================================================*/
Strings1="a";
Strings2="b";
Strings3="ab";
Strings4=s1+s2;
Strings5="a"+"b";
Strings6=s1+"b";
StringBuffers7=newStringBuffer("abc");
Strings8=s7.substring(3);
System.out.println(s3==s4);
System.out.println(s3==s5);
System.out.println(s3==s6);
System.out.println(s4==s6);
System.out.println(s4==s8);
/*=========================Result===============================
--------------------Configuration:<Default>--------------------
false
true
false
false

Processcompleted.
*/
}
}希望大家能够帮助她。

详细问题描述及疑问:下面是一段代码以及运行结果:请对结果给予解释
publicclassStringAndStringBuffer
{

publicstaticvoidmain(String[]args)
{
/*
Strings1="a";
Strings2="b";
Strings3="ab";
System.out.println(s3==s1+s2);
System.out.println(s3=="a"+"b");
*/
/*============================RESULT==============================
--------------------Configuration:<Default>--------------------
false
true

Processcompleted.

=================================================================*/
Strings1="a";
Strings2="b";
Strings3="ab";
Strings4=s1+s2;
Strings5="a"+"b";
Strings6=s1+"b";
StringBuffers7=newStringBuffer("abc");
Strings8=s7.substring(3);
System.out.println(s3==s4);
System.out.println(s3==s5);
System.out.println(s3==s6);
System.out.println(s4==s6);
System.out.println(s4==s8);
/*=========================Result===============================
--------------------Configuration:<Default>--------------------
false
true
false
false

Processcompleted.
*/
}
}期待您的答案,你无异于雪中送炭,让我感激涕零 !

希望以下的回答,能够帮助你。

第1个回答

用户名:就是愛GF3  

首先你要搞清楚的问答是字符串用==比较,是比较两个字符串是不是指向同一个对象。
程序在运行的时候案娘州材会创建一个字符串缓冲池,程序会把字符串常量(如程序中的"a","b","ab","a"+"b")放入字符串缓冲池中(这里"ab","a"+"b"是一个对象)。当使用
Strings3="ab";
Strings4=s极对角是称击蒸居那1+s2;
Strings5="a"+"b";
这样的表达是创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,s3先被放到了池中,所以在s5被创建的时候,程序找到了具有相同值的s3,将s5引用s3电问磁菜倍密四所引用的对象"ab"。所以比较s5==s3由于两个是指向农功缺联排显属实同一个对象,所以为true。
但是在这些赋值中,涉及到变量运算,所以得到的字符串对象存储在各自的内存中,不是缓冲池中的s3对象,如
Strings4=s1+s2;
Strings6=s1+"b";
所以尽管s者依充菜丝念4,s6的值均为"ab",但是s4==s3,s6==s3返回的结果均族弦形活岁关考找为false;
同时s4,s6也绝觉烈其不是指向相同的对象,果亲不式粮组面务线因为他们在不同内存中。
StringBuffers7=newStri础把冷茶ngBuffer("abc");
Strings8=s7.substring(3);//这个方法是从第3个字符取字符串,得到的s8为"';为空字符串。
所以s8==s3的结果也为false;

如果相比较两个字符串的值是不分且升算束是相等,最好用.equals()方法。