java中的字符串相加

下面是一段代码以及运行结果:请对结果给予解释publicclassStringAndStringBuffer{publicstaticvoidmain(String[]a... 下面是一段代码以及运行结果:请对结果给予解释
public class StringAndStringBuffer
{

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

Process completed.

=================================================================*/
String s1 = "a";
String s2 = "b";
String s3 = "ab";
String s4 = s1 + s2;
String s5 = "a" + "b";
String s6 = s1 + "b";
StringBuffer s7 = new StringBuffer("abc");
String s8 = 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

Process completed.
*/
}
}
展开
 我来答
毛良瑜
2011-10-10
知道答主
回答量:2
采纳率:0%
帮助的人:3万
展开全部
首先你要搞清楚的是字符串用==比较,是比较两个字符串是不是指向同一个对象。
程序在运行的时候会创建一个字符串缓冲池,程序会把字符串常量(如程序中的"a","b","ab","a"+"b")放入字符串缓冲池中(这里"ab","a"+"b"是一个对象)。当使用
String s3 = "ab";
String s4 = s1 + s2;
String s5 = "a" + "b";
这样的表达是创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,s3先被放到了池中,所以在s5被创建的时候,程序找到了具有相同值的 s3,将s5引用s3所引用的对象"ab"。所以比较s5==s3由于两个是指向同一个对象,所以为true。
但是在这些赋值中,涉及到变量运算,所以得到的字符串对象存储在各自的内存中,不是缓冲池中的s3对象,如
String s4 = s1 + s2;
String s6 = s1 + "b";
所以 尽管s4,s6的值均为"ab",但是 s4==s3,s6==s3返回的结果均为false;
同时s4,s6也不是指向相同的对象,因为他们在不同内存中。
StringBuffer s7 = new StringBuffer("abc");
String s8 = s7.substring(3); //这个方法是从第3个字符取字符串,得到的s8为"'; 为空字符串。
所以s8==s3的结果也为false;

如果相比较两个字符串的值是不是相等,最好用.equals()方法。
追问
我还有一个问题就是关于java中中文输入的问题,我也查找了好多的资料,试验了好多次,都没有成功。可以给我的发一个程序实例吗?就要一个简单的中文字符输入,然后将其输出
gaogaf
2011-10-10 · TA获得超过1289个赞
知道小有建树答主
回答量:610
采纳率:0%
帮助的人:367万
展开全部
==比较的是变量本身的值,如果是对象,那么变量里存储的是对象的引用。
所以,如果int a=1,那么用a==1判断会是true,因为a的值就是1。
但是如果 String s = new String("aaa"); s=="aaa"判断就是false。
这里有一个需要注意的是,"aaa"到底是个什么东西?
首先,它也是一个对象,只不过是编译器替你创建的,那么用==比较的时候,实际上是在比较对象的引用。而s的引用显然和"aaa"的引用不同,因为是两个不同的对象。
还要注意一点:如果String s = "aaa",那么s实际指向的就是"aaa",也就是s的值(对象的引用)和对象"aaa"的值相同,都是同一个引用,这种写法相当于:
String x = new String();
x.setValue(“aaa”);//只有编译器可以这么做
String s = x;
另外还有+操作符,如果是"aaa"+"bbb"这种情况,编译器会直接创建对象“aaabbb”。
而如果包含自己定义的String对象,则不会出现上边那种整合,而是在运行时创建一个新的对象。这时,引用就是新的了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yulongxy
2011-10-10 · TA获得超过503个赞
知道小有建树答主
回答量:138
采纳率:0%
帮助的人:122万
展开全部
== 比较对象的引用是否相同,引用就是对象地址
equals是对象的方法,基本上实现来比较对象自己的内容
说多了也没用,看程序
String s1 = "a";
String s2 = "b";
String s3 = "ab";
String s4 = s1 + s2;
String s5 = "a" + "b";
String s6 = s1 + "b";
StringBuffer s7 = new StringBuffer("abc");
String s8 = s7.substring(0,2);
System.out.println(s3 == s4);//F
System.out.println(s3.equals(s4));//T
System.out.println(s3 == s5);//T
System.out.println(s3.equals(s5));//T
System.out.println(s3 == s6);//F
System.out.println(s3.equals(s6));//T
System.out.println(s4 == s6);//F
System.out.println(s4.equals(s6));//T
System.out.println(s4 == s8);//F
System.out.println(s4.equals(s8));//T
/*=========================Result===============================
--------------------Configuration: <Default>--------------------
false
true
true
true
false
true
false
true
false
true

Process completed.
*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Tidus_forever
2011-10-10 · TA获得超过4399个赞
知道大有可为答主
回答量:2782
采纳率:100%
帮助的人:1852万
展开全部
ab 是常量字符串 "a"+"b"也是,所以是一样的,其他的都是不同的字符串对象
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4ac1ef5
2011-10-10 · TA获得超过106个赞
知道答主
回答量:59
采纳率:0%
帮助的人:17.4万
展开全部
只是ascii的值不同罢了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式