当前位置:编程学习 > JAVA >>

检查一下你的编程语言基础知识怎么样,说出这段代码输出结果,为什么?

import java.util.HashSet;


public class java01 {

/**
 * @param args
 * @throws InterruptedException 
 */
public static void main(String[] args) throws InterruptedException {
ST st=null;

pt(st);
System.out.println("bb:"+(st==null?"空":"非空"));

}

public static  void pt(ST st){
st=new ST();
System.out.println("aa:"+(st==null?"空":"非空"));
}
}
面向对象 栈 堆 引用 编程语言 --------------------编程问答-------------------- aa:非空
bb:空 --------------------编程问答-------------------- 这个问题在于java语言传参数的机制
先说下结果:aa:非空 , bb:空
分析:方法pt的参数st在此方法内部可以作为对象ST的一个引用,只是在方法内运行有效,一旦执行结束就会消失。
在本例中是将st作为参数传进去的,也就是说将st的副本传进去了,当在方法运行结束后,st的副本也就会消失。所以说对于外界的st变量还是指向null。但是在内部由于重新new了一次,是非空对象。
lz翻阅下java编程思想,里面有专门的章节介绍这个问题 --------------------编程问答-------------------- aa:非空
bb:空 --------------------编程问答--------------------
引用 2 楼 lvzg_005 的回复:
这个问题在于java语言传参数的机制
先说下结果:aa:非空 , bb:空
分析:方法pt的参数st在此方法内部可以作为对象ST的一个引用,只是在方法内运行有效,一旦执行结束就会消失。
在本例中是将st作为参数传进去的,也就是说将st的副本传进去了,当在方法运行结束后,st的副本也就会消失。所以说对于外界的st变量还是指向null。但是在内部由于重新new了一次,是……
你的理解非常正确呀,跟很多人讨论过,没有给出最正确的答案,你是第一个 --------------------编程问答-------------------- 还是按值传递的问题 --------------------编程问答--------------------
引用 2 楼 lvzg_005 的回复:
这个问题在于java语言传参数的机制
先说下结果:aa:非空 , bb:空
分析:方法pt的参数st在此方法内部可以作为对象ST的一个引用,只是在方法内运行有效,一旦执行结束就会消失。
在本例中是将st作为参数传进去的,也就是说将st的副本传进去了,当在方法运行结束后,st的副本也就会消失。所以说对于外界的st变量还是指向null。但是在内部由于重新new了一次,是……

也就是说 静态方法中传递的对象是以值传递的方式 执行的吗?? --------------------编程问答-------------------- aa:非空
bb:空
我理解的是:在main里面实例化st=null;java虚拟机在执行时候将null赋值给st,当调用方法时候传参给这个方法,方法内部new ST(),虚拟机此时分配内存空间给st,此时的st非空,所以aa:非空。当方法执行之后,java虚拟机将内存释放掉,此时st还原成null,所以bb:空 --------------------编程问答-------------------- http://bbs.csdn.net/topics/390428887
这里有非常热烈的讨论,详细解答过程
--------------------编程问答-------------------- aa:非空
bb:空
问题? --------------------编程问答--------------------
引用 9 楼 NNTT2010 的回复:
aa:非空
bb:空
问题?

答案是对的,可是为什么你知道吗 --------------------编程问答-------------------- 这题我做错了 --------------------编程问答--------------------
引用 2 楼 lvzg_005 的回复:
这个问题在于java语言传参数的机制
先说下结果:aa:非空 , bb:空
分析:方法pt的参数st在此方法内部可以作为对象ST的一个引用,只是在方法内运行有效,一旦执行结束就会消失。
在本例中是将st作为参数传进去的,也就是说将st的副本传进去了,当在方法运行结束后,st的副本也就会消失。所以说对于外界的st变量还是指向null。但是在内部由于重新new了一次,是……

--------------------编程问答-------------------- aa:非空
bb:非空

值栈中的 st 在申明的时候指向 null;

pt(st)之后,指向一个具体的 ST 对象,并输出 aa:非空.

main方法继续执行, 发现 st 指向一个实例. 输出 bb:非空.
--------------------编程问答--------------------
引用 13 楼 u010086540 的回复:
aa:非空
bb:非空

值栈中的 st 在申明的时候指向 null;

pt(st)之后,指向一个具体的 ST 对象,并输出 aa:非空.

main方法继续执行, 发现 st 指向一个实例. 输出 bb:非空.

表示无奈。。。2楼是正解
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,