一道scjp题,关于java 变量引用的,知道为什么输出10,20吗?
2007-06-07 08:20
435 查看
源代码
主程序
public class Test1 {
public void amethod(){
ValHold v=new ValHold();
another(v);
System.out.println(v.i);
}
public void another(ValHold v) {
// TODO 自动生成方法存根
v.i=20;
ValHold vh=new ValHold();
v=vh;
System.out.println(v.i);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
Test1 t=new Test1();
t.amethod();
}
}
辅助类;
package com.hf.scjp.reference.test1;
public class ValHold {
public int i=10;
}
-----------------------20060608--------------------------------------------------
当一个引用变量作为参数传递给一个方法时,在这个方法内部可以改变变量的值,即改变引用指向的对象;
但是当方法调用结束后,该变量恢复原来的值,即变量仍然指向原来的对象。即another调用结束时,v又回复到
ValHold v=new ValHold();时指向的地址空间了。
但是当在方法内部改变了引用指向的对象的数据:v.i=20;
那么当调用方法结束之后(another),尽管引用仍然指向原来的对象,但这个对象的属性已经被改变了,所以调用方法结束后,v.i已经变成了20.
主程序
public class Test1 {
public void amethod(){
ValHold v=new ValHold();
another(v);
System.out.println(v.i);
}
public void another(ValHold v) {
// TODO 自动生成方法存根
v.i=20;
ValHold vh=new ValHold();
v=vh;
System.out.println(v.i);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
Test1 t=new Test1();
t.amethod();
}
}
辅助类;
package com.hf.scjp.reference.test1;
public class ValHold {
public int i=10;
}
-----------------------20060608--------------------------------------------------
当一个引用变量作为参数传递给一个方法时,在这个方法内部可以改变变量的值,即改变引用指向的对象;
但是当方法调用结束后,该变量恢复原来的值,即变量仍然指向原来的对象。即another调用结束时,v又回复到
ValHold v=new ValHold();时指向的地址空间了。
但是当在方法内部改变了引用指向的对象的数据:v.i=20;
那么当调用方法结束之后(another),尽管引用仍然指向原来的对象,但这个对象的属性已经被改变了,所以调用方法结束后,v.i已经变成了20.
相关文章推荐
- 关于java输出的一道面试题
- java__for if10以内从1开始相加大于20输出
- 关于Java引用,你必须知道这些
- 声明两个变量:int n1=10,n2=20;要求将两个变量交换,最后输出n1为20,n2为10。扩展(*):不使用第三个变量如何交换?
- Java中为什么内部类对外部类局部变量有引用时,外部类局部变量一定要有final?
- 一道关于php变量引用的面试题
- 关于Java强引用,软引用,弱引用,你知道吗?
- 关于java中对于成员变量的引用问题
- 关于java为什么在Method中局部内部类或者匿名内部类调用Method中定义的变量要用final修饰?
- 一道关于php变量引用的面试题
- 一道阿里巴巴笔试题中,关于java中的变量,初始化快,构造函数初始化分析
- Java中为什么内部类对外部类局部变量有引用时,外部类局部变量一定要有final?
- java学习心得:关于对象与引用变量的关系的理解
- 关于Java引用,你必须知道这些
- 关于Java为什么配置好环境变量但是不能在命令行cmd运行javac的问题
- java为什么不能在静态域或方法中引用类型变量?
- Java中为什么内部类对外部类局部变量有引用时,外部类局部变量一定要有final?
- 在C++中,为什么直接输出char类型变量的地址为乱码?
- 【Scikit-Learn 中文文档】监督学习:从高维观察预测输出变量 - 关于科学数据处理的统计学习教程 - scikit-learn 教程 | ApacheCN
- java中关于null你必须知道的几件事情