一个Java程序题困扰了我好久,怎么想也没想明白到底是怎么回事,请各位Java大神出手帮帮忙看看~谢谢了!
//我是一个java新手,请大神指教一下,呵呵~classValue{publicinti=15;}publicclassTestValue{publicstaticvo...
//我是一个java新手,请大神指教一下,呵呵~
class Value{
public int i = 15;
}
public class TestValue{
public static void main(String argv[]){
TestValue t = new TestValue();
t.first();
}
public void first(){
int i = 5;
Value v = new Value();
v.i = 25;
second(v, i);
System.out.println(v.i);
}
public void second(Value v, int i){
i = 0;
v.i = 20;
Value val = new Value();
v = val;
System.out.println(v.i + " " + i);
}
} 展开
class Value{
public int i = 15;
}
public class TestValue{
public static void main(String argv[]){
TestValue t = new TestValue();
t.first();
}
public void first(){
int i = 5;
Value v = new Value();
v.i = 25;
second(v, i);
System.out.println(v.i);
}
public void second(Value v, int i){
i = 0;
v.i = 20;
Value val = new Value();
v = val;
System.out.println(v.i + " " + i);
}
} 展开
3个回答
展开全部
看代码要先从主方法看
public static void main(string argv[])就是主方法
所有的代码都是从这里开始运行的
TestValue t = new TestValue();
这是声明一个变量t 他的类型是TestValue
然后你再去看TestValue这个类
有两个方法一个是first() 一个是second(value v,int i);
主方法的第三句话是t.first();
就是说它调用了第一个方法first()
再看first()方法
int i=5;声明一个int类型的i值为5,
Value v = new Value();声明一个Value类型的v
v.i=25;为Value类型里面的plublic int i = 15这个i赋值 i是public 公有的所有v.i = 25;是起作用的
所以v.i的值就是25,
second(v,i);这里调用了second(Value v,int i)方法
把v传到second方法里面
i = 0; i赋值为0
v.i = 20; 把对象v里面的i赋值为20
Value val = new Value(); 声明一个Value类型的val
v = val; 把val的赋值给v
System.out.println(v.i + " " + i);打印val.i和的i
应该是打印15和0
最后在走first()方法的最后一段代码
System.out.println(v.i);
v.i前面赋值为25后来赋值为20 然后把val赋值给v
这里前两步骤是值传递 因为i是int类型的
val赋值给v是引用传递所以没有赋值,只是改变它的指向地址。
所以最后打印的结果是
15 0
20
public static void main(string argv[])就是主方法
所有的代码都是从这里开始运行的
TestValue t = new TestValue();
这是声明一个变量t 他的类型是TestValue
然后你再去看TestValue这个类
有两个方法一个是first() 一个是second(value v,int i);
主方法的第三句话是t.first();
就是说它调用了第一个方法first()
再看first()方法
int i=5;声明一个int类型的i值为5,
Value v = new Value();声明一个Value类型的v
v.i=25;为Value类型里面的plublic int i = 15这个i赋值 i是public 公有的所有v.i = 25;是起作用的
所以v.i的值就是25,
second(v,i);这里调用了second(Value v,int i)方法
把v传到second方法里面
i = 0; i赋值为0
v.i = 20; 把对象v里面的i赋值为20
Value val = new Value(); 声明一个Value类型的val
v = val; 把val的赋值给v
System.out.println(v.i + " " + i);打印val.i和的i
应该是打印15和0
最后在走first()方法的最后一段代码
System.out.println(v.i);
v.i前面赋值为25后来赋值为20 然后把val赋值给v
这里前两步骤是值传递 因为i是int类型的
val赋值给v是引用传递所以没有赋值,只是改变它的指向地址。
所以最后打印的结果是
15 0
20
追问
second(v, i);
System.out.println(v.i);
v.i = 20;
System.out.println(v.i + " " + i);
这几个v.i为什么他的值不一样呢。这几个v.i把我这个基础不怎么扎实的我搞糊涂了。
麻烦你指教一下谢谢
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询