Given:
class CarDboard{
Short story=5;
CardBoard go(CardBoard cb){
cb=null;
return cb;
}
public static void main(String[] args){
CardBoard c1= new CardBoard();
CardBoard c2= new CardBoard();
CardBoard c3= c1.go(c2);
c1=null
// do Stuff
}}
When //doStuff is reached,how many objects are eligible for GC?A,0
B,1
C,2
D,Compilation fails.
E,It is not possible to know.
F,An exception is thrown at runtime.答案选C,说是c1跟Short两个object符合要求,我不知道为什么,为什么c2不符合呢,不是在go 方法内附值为null了吗,而且又是引用传递,可以改变原来的值的,我想不明白,希望各位高手帮忙
class CarDboard{
Short story=5;
CardBoard go(CardBoard cb){
cb=null;
return cb;
}
public static void main(String[] args){
CardBoard c1= new CardBoard();
CardBoard c2= new CardBoard();
CardBoard c3= c1.go(c2);
c1=null
// do Stuff
}}
When //doStuff is reached,how many objects are eligible for GC?A,0
B,1
C,2
D,Compilation fails.
E,It is not possible to know.
F,An exception is thrown at runtime.答案选C,说是c1跟Short两个object符合要求,我不知道为什么,为什么c2不符合呢,不是在go 方法内附值为null了吗,而且又是引用传递,可以改变原来的值的,我想不明白,希望各位高手帮忙
解决方案 »
- 一个关于list想不通的问题,java 源码研究发现
- 大家都写的请教高手,可上面貌似没啥高手,郁闷啊。。。。。。。。。
- 关于Swing中的JSpinner
- Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
- 高分求解改写一句柱状图计算代码!!
- 问个绝对基础的问题 绝对高手进
- ==请问谁有 Wise for Windows Installer 5.21 的使用方法或手册呀!!=======
- 关于BufferedReader.read()的问题
- Unable to resolve HelloHome 是怎么回事?
- 网络数据包的抓取,和数据包的返回。
- 能给个详细准确的面向对象和面向过程的定义吗?
- java 对象引用的问题。。。。。
go方法中的确传递的是c2的一个引用,但传入的是c2的地址(是一个数值,参数c2类似C中的指针),因此可以通过c2.variable = ...;改变原来的值。但是c2 = null是将go方法中的c2重新指向了null,但main方法中原来的c2指向的地址并没有改变。
不知道这样说能不能明白?
把c2指向null,也就是把这个引用的对象的内容变为null,那main方法中的c2也是指向同一个对象,那个对象不也一样是null吗。“c1跟Short两个object符合要求?不明白什么意思,”
意思是说,答案说程序运行完后c1跟short两个对象为null符合gc条件
{
a = 2;
}
public static void go(String s)
{
s = null;
}
public static void main(String[] args)
{
int a = 3;
String s = "123";
go(a);
go(s);
System.out.println(s);
System.out.println(a);
}
上面那个方法中参数a是值传递,它在方法中被赋值为2,但是原先main方法中的a却不会被改变。
而String对象s传递的只是地址,地址是一个数值,不会在go方法被改变。c3的确不是,因为它根本没有指向过CardBoard对象