java中如果 A tmp = new A(“a”);
后,tmp = new A(“b”)     之前要不要进行资源释放?
  
  VM里面用一个reference进行寻址,其实就是找出对象,
 在java里面所有的类和数组都被看成对象,
  reference进行寻址其实就是像指针reference就会像指针一样,你初始化了 A tmp = new A(“a”)  reference就会指向 a 的值,然后释放以前的值,
a是引用类型,对象就像地址一样.
String  b=new Stirng("b");
String  c=new String ("c");
b和c比较是对象里面的值,    b==c 这样子是值比较  等于b是值.
b.equals(c) 这样子是比较对象, 就是通过地址进行比较
VM只要找到对象就是找到地址,而离开原来的地址,本来的地址就被释放了,指向新的地址
-----------------------------------------------------
  我这样子理解也不一定正确

解决方案 »

  1.   

    对于对象, ==比较的是他们的引用,也就是说他们是不是同一个对象。而 equals方法比较的是他们的值是否是同一个。打个比方 
    String a = new String("a");
    String b = new String("a");a == b 是比较字符串 a 和 b 是不是同一个对象。像上面的代码,肯定是返回 false。
    但是 a.equals(b) 是比较字符串 a 和 b 的值是不是相同的。那么返回的是true。值得注意的是,String的处理有点特殊,和一般的对象不一样。Java虚拟机维护了一个字符串池。如果你使用类似
    String a = "a";
    String b = "a";
    这样的代码,那么 a== b 会返回 true。因为如果上面说的,虚拟机维护了一个字符串池。如果你没有强制指定生成一个新的对象(使用 new String(...)),那么,虚拟机会将字符串池中字面值相同的字符串对象付给你的变量。所以,上面的a 和 b其实都是同一个字符串对象。
      

  2.   

    String     b=new   Stirng( "b "); 
    String     c=new   String   ( "c "); 
    b和c比较是对象里面的值,        b==c   这样子是值比较  等于b是值. 
    b.equals(c)   这样子是比较对象, 就是通过地址进行比较 
    这是错误的说法