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

解决方案 »

  1.   

    s += "abc";关键是这句话和字符串相加的原因 ,和字符串相加的东西都会以字符形式输出的
      

  2.   

    比如  
    int s =23;
    s+="abc";
    结果就是23abc
      

  3.   

    你s是null.
    结果就是这样.
    如果改成这样:
    String s = "";
    s += "abc";
    结果就是"abc"了
      

  4.   

    这样的,因为 “abc” 是string类型。jvm 会自动调用null 的tostring方法
    来保持跟 abc的类型一致
      

  5.   

    s += "abc";
    等价于: s = s + "abc";
      

  6.   

    String s = null;
    s = "abc";
      

  7.   

    null还有tostring方法?第一次听说
      

  8.   

    String+String实际上使用StringBuilder的append实现的. 
    而append方法return append(String.valueOf(obj)); 
    String.valueOf()方法 
    return (obj == null) ? "null" : obj.toString(); 
    如果是null,返回字符串null 
      

  9.   

    String s = null;
    在常量池中定义值为null,
    所以s+="abc";结果为nullabc
      

  10.   

    因为
    String s = null + "abc"; //此时的s为 nullabc;
    所以
    String s = null;
    s += "abc";  //此时的s也为nullabc;另外
    s = 1 + "abc"; // 为 1abc
      

  11.   

    首先String的不是基本类型,是对象.
         String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。 
         Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持
         你那句代码的意思是: String s = null + "abc";所以才打印出来: nullabc
      

  12.   

    断点跟一下就知道了,程序会调用public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
        }这时你的obj为null,返回“null”
      

  13.   

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

  14.   

    问题的本质:
    s+="abc"
    就相当于
    s=s+"abc"
    当s的初始值为null时,s=s+"abc"的结果就是nullabc
    在jdk1.6.0_17下测试通过
    如果是toString()方法,当s为null时有异常如果是常量池不会凭空出现字符串"null"
      

  15.   

    真有明白的人.! 呵呵!  字符串拼接中间会产生StringBuild/StringBuffer,这个我很早就想到了, 只是华为的笔试题, 当时没机子运行, 所以凭空想就没想到valueOf()  呵呵.! 谢谢给出这些类似答案的兄弟!
      

  16.   

    因为你的s初始化为null(当然了,你不赋值为null,默认的也是null),所以你在进行‘+’操作的时候会把null连接上去,应当把s赋值为s=“”;
    建议你进行字符串的连接操作时使用StringBuffer这个内,里面有appand()方法。两者的区别是使用重载‘+’操作时,相当于声明了很多s对象,而使用StringBuffer只声明了一个!