解决方案 »

  1.   

    首先官方文档的解释在这里:
    http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.18.1.1简单说,对 null 执行自动转换时,会转换成 "null" 字符串。
      

  2.   

    String.class 类public final class String
        implements java.io.Serializable, Comparable<String>, CharSequence {
        /** The value is used for character storage. */
        private final char value[];    /** Cache the hash code for the string */
        private int hash; // Default to 0    public String(String original) {
            this.value = original.value;
            this.hash = original.hash;
    }String 初始化为null,会默认转为字符串的null,且他们的hash值相同
      

  3.   

    当任何类型的值 和 String类型的值相加的时候. 都会被强制转换为String.
    而你的s的null 被转为String的时候, 就是字符串"null".. 就是这样......
      

  4.   

    道理楼上的都说,说下其他的,想得到字符串a,就赋值为“”而不是NULL
      

  5.   

    代码     String s = "null";
     System.out.println(s);字节码 Compiled from "A.java"
    public class A {
      public A();
        Code:
           0: aload_0
           1: invokespecial #1                  // Method java/lang/Object."<init>":
           4: return  public static void main(java.lang.String[]);
        Code:
           0: aconst_null
           1: astore_1
           2: getstatic     #2                  // Field java/lang/System.out:Ljava/
           5: aload_1
           6: invokevirtual #3                  // Method java/io/PrintStream.printl
           9: return
    }aconst_null:解释如下  指令格式:  aconst_null
     
    功能描述:  null进栈。
     
    指令执行前
    指令执行后
    栈底
    ...
    ...
     
    null
    栈顶
     
    注意:JVM并没有为null指派一个具体的值。
      

  6.   

    还可以参考 NullType  希望大神继续回复。