不知道你说的是不是这种效果
/*
*使用一个类名new两个对象
* */
public class Test {
//String为类名
public static void main(String args[]){
String param1 = new String("我是第一个对象");
String param2 = new String("我是第二个对象");
System.out.println(param1);
System.out.println(param2);
}
}
这里原先Test(1)的对象还在吗?不一定,如果回收是随机的
java会自动清除吗?如果你在程序其他地方没有再引用Test(1)对象, 在GC的紧缩标记回收阶段会发现没有了refer,会被清除掉。
java有delete机制吗?没有,所谓虚拟机,就是一个java。exe进程,这个进程已经占用了-Xms=?M这么大的初始内存,将来运行中可能会增长到-Xmx这么大的内存,再不够用就outofmem了。你不需要像c一样去析构,因为c是找操作系统拿内存,你不释放,操作系统认为你在用,java中,你找虚拟机要,虚拟机会帮你管理,你不要了,它就收回去给别人用。
a在这里是相当于一个指针指向了新的堆内存吗?非常正确
原先的Test(1)还存在,a指向了一个新地址,也就是堆内存的地址。JAVA有GC,垃圾回收机制,无需程序员考虑的。
Test(1)还在
会自动清除
java有自动回收机制 new 的对象多了 如果长时间没用会自动清除
可以那样理解 只是将a指的对象换了 但是原先的对象还在
应该不行吧,这样的话编译器无法区分啊