请教一个字符串拼接的问题!

izard999 2010-12-01 12:01:43
String s = null;
s += "abc";
s最后为何会变成nullabc 呢.?
请真正明白的兄弟给个正解.!

...全文
163 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
gesanri 2010-12-01
  • 打赏
  • 举报
回复
断点跟一下就知道了,程序会调用

public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}

这时你的obj为null,返回“null”
icefire_love 2010-12-01
  • 打赏
  • 举报
回复
首先String的不是基本类型,是对象.
String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持
你那句代码的意思是: String s = null + "abc";

所以才打印出来: nullabc
stalendp 2010-12-01
  • 打赏
  • 举报
回复
因为
String s = null + "abc"; //此时的s为 nullabc;
所以
String s = null;
s += "abc"; //此时的s也为nullabc;

另外
s = 1 + "abc"; // 为 1abc
czmchen 2010-12-01
  • 打赏
  • 举报
回复
String s = null;
在常量池中定义值为null,
所以s+="abc";结果为nullabc
gxifu 2010-12-01
  • 打赏
  • 举报
回复
String+String实际上使用StringBuilder的append实现的.
而append方法return append(String.valueOf(obj));
String.valueOf()方法
return (obj == null) ? "null" : obj.toString();
如果是null,返回字符串null
wangxpengx 2010-12-01
  • 打赏
  • 举报
回复
null还有tostring方法?第一次听说
ZhangFengFree 2010-12-01
  • 打赏
  • 举报
回复
String s = null;
s = "abc";
zhengxiu001 2010-12-01
  • 打赏
  • 举报
回复
s += "abc";
等价于: s = s + "abc";
amdgaming 2010-12-01
  • 打赏
  • 举报
回复
这样的,因为 “abc” 是string类型。jvm 会自动调用null 的tostring方法
来保持跟 abc的类型一致
fantasy0126 2010-12-01
  • 打赏
  • 举报
回复
你s是null.
结果就是这样.
如果改成这样:
String s = "";
s += "abc";
结果就是"abc"了
Jlins 2010-12-01
  • 打赏
  • 举报
回复
比如
int s =23;
s+="abc";
结果就是23abc
Jlins 2010-12-01
  • 打赏
  • 举报
回复
s += "abc";关键是这句话

和字符串相加的原因 ,和字符串相加的东西都会以字符形式输出的
neulingxiabadu 2010-12-01
  • 打赏
  • 举报
回复
因为你的s初始化为null(当然了,你不赋值为null,默认的也是null),所以你在进行‘+’操作的时候会把null连接上去,应当把s赋值为s=“”;
建议你进行字符串的连接操作时使用StringBuffer这个内,里面有appand()方法。两者的区别是使用重载‘+’操作时,相当于声明了很多s对象,而使用StringBuffer只声明了一个!
zqfddqr 2010-12-01
  • 打赏
  • 举报
回复
    
izard999 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 gxifu 的回复:]
String+String实际上使用StringBuilder的append实现的.
而append方法return append(String.valueOf(obj));
String.valueOf()方法
return (obj == null) ? "null" : obj.toString();
如果是null,返回字符串null
[/Quote]
真有明白的人.! 呵呵! 字符串拼接中间会产生StringBuild/StringBuffer,这个我很早就想到了, 只是华为的笔试题, 当时没机子运行, 所以凭空想就没想到valueOf() 呵呵.! 谢谢给出这些类似答案的兄弟!
izard999 2010-12-01
  • 打赏
  • 举报
回复
好了.. 我看到我要的答案了.!
嘿嘿.! 谢谢给正解的弟兄们.. 结贴给分
tom_66 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 gesanri 的回复:]
断点跟一下就知道了,程序会调用

Java code

public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}


这时你的obj为null,返回“null”
[/Quote]
说到重点了
小龙在线 2010-12-01
  • 打赏
  • 举报
回复
问题的本质:
s+="abc"
就相当于
s=s+"abc"
当s的初始值为null时,s=s+"abc"的结果就是nullabc
在jdk1.6.0_17下测试通过


如果是toString()方法,当s为null时有异常

如果是常量池不会凭空出现字符串"null"
wgqtx 2010-12-01
  • 打赏
  • 举报
回复
String s = null;
s += "abc";

你s+="abc"; 相当于s=s+"abc";
又因为s=null 于是 s=null+abc
就等于nullabc
但是如果改成这样:
String s=""
s += "abc";
结果就是"abc"了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧