进行资源释放问题

huang3407 2007-11-02 08:42:46
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只要找到对象就是找到地址,而离开原来的地址,本来的地址就被释放了,指向新的地址
-----------------------------------------------------
  我这样子理解也不一定正确
...全文
46 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
FredWorks 2007-11-03
  • 打赏
  • 举报
回复
String b=new Stirng( "b ");
String c=new String ( "c ");
b和c比较是对象里面的值,  b==c 这样子是值比较  等于b是值.
b.equals(c) 这样子是比较对象, 就是通过地址进行比较


这是错误的说法
FredWorks 2007-11-03
  • 打赏
  • 举报
回复
对于对象, ==比较的是他们的引用,也就是说他们是不是同一个对象。而 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其实都是同一个字符串对象。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧