解决方案 »

  1.   

    String s = new String("abc");  
    这样String 是两个对象,一个是abc 一个是null
    == 比较的是两个对象的内存地址是否一样
    equals()比较的是内存里面的值是否一样
      

  2.   

    你的“qwe”在常量池中地址是相同的,而a,b引用的都是这个地址,==又是比较地址的,所以是true
      

  3.   

    string是final修饰,你这么写是常量,并没有创建对象,存在于堆中,建议你看常量池!
      

  4.   

    建议你看一下==和equal的比较~
      

  5.   

    补充一下。==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同
      

  6.   

    三个对象,a,b,"qwe"。a,b都指向同一个引用地址X0nnnn,X0nnnn就表示的是“qwe”。
      

  7.   

    churige 的回答已经很清楚了
      

  8.   

    String a="qwe";String b="qwe";使用的是常量池,因为是相同的字符串,所以只会创建同一个对象。
    如果使用的是String a=new String("qwe");String b=new String("qwe");那此时就是创建不同的对象了。
      

  9.   

    http://blog.csdn.net/hello_yz/article/details/39024453,你看看算不算解决了你的问题。如果想更深入了解,建议看看java内存分配相关的。
    JVM为了节约空间提高效率神马的,还是做了很多事情的~~~~~