打印false是应该的吧,"Hel"+lo是两个字符串的和,而"Hello"是一个字符串
hello=="Hello"打印false不是因为二者相等,是因为二者的存储地址一样,
java对字符串的管理是同样的字面量在堆中只有一个,所有“相等”的变量只是同一个字符串字面量的引用,这么解释知道为什么了么?

解决方案 »

  1.   

    String型的数据的比较因为String本身就是对象(Object),所以一般用.equals()进行比较,“==”也可以比较,但是对于对象不光比较值,而且会比较两个变量的地址信息。
      

  2.   

    对不起,上面打错了一个词:false-->true
      

  3.   

    对在java中object == object 是比较地址,而equals在String类型中比较数值
    请注意
      

  4.   

    ==表示不仅这两个值想等,而且他们还在占有相同的内存。就是说。==两边表示同一个对象。
    而equeal方法只是不是这两个值相等。比如:
    String A = "aaaaaa";
    String B ="aaaaaa";
    String C = A;A == C 是对的,A.equal(C); 也是对的。

    A.equeal(B)是对的,A!=B
    同时注意,当两个string相加时候,得到的新的对象是另外一个新的地址。
    比如; A+B; 将会得到一个新的对象"aaaaaaaaaaaa",但是他既不是在A地址上的扩展,也不是在B上的扩展。而是一个新的地址。这也就是为什么我们使用StringBuffer节省内存的原因。