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只要找到对象就是找到地址,而离开原来的地址,本来的地址就被释放了,指向新的地址
-----------------------------------------------------
我这样子理解也不一定正确
后,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只要找到对象就是找到地址,而离开原来的地址,本来的地址就被释放了,指向新的地址
-----------------------------------------------------
我这样子理解也不一定正确
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其实都是同一个字符串对象。
String c=new String ( "c ");
b和c比较是对象里面的值, b==c 这样子是值比较 等于b是值.
b.equals(c) 这样子是比较对象, 就是通过地址进行比较
这是错误的说法