在加上一点
System.out.println(java=="ja"+"va");
返回为TRUE,
System.out.println(java=="ja"+va);返回为FALSE,
不明白这里!!!

解决方案 »

  1.   

    这是因为String对象的实例化有两种途径:
    1.String s = new String("java");
    2.String s = "java";方法1,jvm会分配一个新的String实例;方法2,jvm会从它维护的一个String池中查找是否已有值为java的String实例,如果有就共享这个实例。这是jvm的一种优化手段。所以你的程序中String java="java",jvm会查找我提到的那个池,如果有则共享,如果没有新建一个"java"放入池中。接着System.out.println(java=="java"); ,==是比较是否为一个object,后面的那个"java"也是从池中公用的,所以两个object其实都是池中的那个,比较结果就是true了。
      

  2.   

    System.out.println(java=="ja"+va);返回为FALSE?
      

  3.   

    System.out.println(java=="ja"+va);是返回为FALSE,我试过了,还是不明白为什么???
      

  4.   

    这个问题我也找了很久的答案,其实看一下反编译的代码就可以弄清除。不过,我觉得要比较两个String是否相等还是使用equals比较保险。
      

  5.   

    "ja"+va,jvm会生成一个新的String object,和原来的java当然不会是同一个object