请教一个字符串拼接的问题! String s = null;s += "abc";s最后为何会变成nullabc 呢.?请真正明白的兄弟给个正解.! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 s += "abc";关键是这句话和字符串相加的原因 ,和字符串相加的东西都会以字符形式输出的 比如 int s =23;s+="abc";结果就是23abc 你s是null.结果就是这样.如果改成这样:String s = "";s += "abc";结果就是"abc"了 这样的,因为 “abc” 是string类型。jvm 会自动调用null 的tostring方法来保持跟 abc的类型一致 s += "abc";等价于: s = s + "abc"; String s = null;s = "abc"; null还有tostring方法?第一次听说 String+String实际上使用StringBuilder的append实现的. 而append方法return append(String.valueOf(obj)); String.valueOf()方法 return (obj == null) ? "null" : obj.toString(); 如果是null,返回字符串null String s = null;在常量池中定义值为null,所以s+="abc";结果为nullabc 因为String s = null + "abc"; //此时的s为 nullabc;所以String s = null;s += "abc"; //此时的s也为nullabc;另外s = 1 + "abc"; // 为 1abc等 首先String的不是基本类型,是对象. String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。 Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持 你那句代码的意思是: String s = null + "abc";所以才打印出来: nullabc 断点跟一下就知道了,程序会调用public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }这时你的obj为null,返回“null” String s = null;s += "abc";你s+="abc"; 相当于s=s+"abc";又因为s=null 于是 s=null+abc就等于nullabc但是如果改成这样:String s=""s += "abc";结果就是"abc"了 问题的本质:s+="abc"就相当于s=s+"abc"当s的初始值为null时,s=s+"abc"的结果就是nullabc在jdk1.6.0_17下测试通过如果是toString()方法,当s为null时有异常如果是常量池不会凭空出现字符串"null" 真有明白的人.! 呵呵! 字符串拼接中间会产生StringBuild/StringBuffer,这个我很早就想到了, 只是华为的笔试题, 当时没机子运行, 所以凭空想就没想到valueOf() 呵呵.! 谢谢给出这些类似答案的兄弟! 因为你的s初始化为null(当然了,你不赋值为null,默认的也是null),所以你在进行‘+’操作的时候会把null连接上去,应当把s赋值为s=“”;建议你进行字符串的连接操作时使用StringBuffer这个内,里面有appand()方法。两者的区别是使用重载‘+’操作时,相当于声明了很多s对象,而使用StringBuffer只声明了一个! 想读点源代码,谁给推荐个 java 传引用????急急急 SWT 中如何在TREE中添加一个item swing中如何利用相对路径来 JAVA <> SQL <> XML 如何把 JFrame 的标题框藏起来? 我想在JAVA程序中把一个byte值为0x80的字节写入一个日志文本文件中... EXCEL导入时,判断是否有重复数据,并显示哪2行重复. Java里面的字符串可以不可以加一个前缀可以避免被转义的? 谁有jcreator pro的注册码? Swing容器和Jdbc的执行顺序问题 关于监听剪贴版的问题
int s =23;
s+="abc";
结果就是23abc
结果就是这样.
如果改成这样:
String s = "";
s += "abc";
结果就是"abc"了
来保持跟 abc的类型一致
等价于: s = s + "abc";
s = "abc";
而append方法return append(String.valueOf(obj));
String.valueOf()方法
return (obj == null) ? "null" : obj.toString();
如果是null,返回字符串null
在常量池中定义值为null,
所以s+="abc";结果为nullabc
String s = null + "abc"; //此时的s为 nullabc;
所以
String s = null;
s += "abc"; //此时的s也为nullabc;另外
s = 1 + "abc"; // 为 1abc
等
String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持
你那句代码的意思是: String s = null + "abc";所以才打印出来: nullabc
return (obj == null) ? "null" : obj.toString();
}这时你的obj为null,返回“null”
s += "abc";你s+="abc"; 相当于s=s+"abc";
又因为s=null 于是 s=null+abc
就等于nullabc
但是如果改成这样:
String s=""
s += "abc";
结果就是"abc"了
s+="abc"
就相当于
s=s+"abc"
当s的初始值为null时,s=s+"abc"的结果就是nullabc
在jdk1.6.0_17下测试通过
如果是toString()方法,当s为null时有异常如果是常量池不会凭空出现字符串"null"
建议你进行字符串的连接操作时使用StringBuffer这个内,里面有appand()方法。两者的区别是使用重载‘+’操作时,相当于声明了很多s对象,而使用StringBuffer只声明了一个!