问题描述
- java中为什么x的输出为20 而 i 的输出为10
-
public class Pass {
static int j=20;
public static void main(String []args){
int i=10;
Pass p=new Pass();
p.method(i);
System.out.println(i);
System.out.println(j);} public void method(int x){ x=x*2; j=j*2; System.out.println(x); }
}
解决方案
很简单,因为java中int传递的是值,改变函数内的x,不会实际改变i
解决方案二:
你的问题更进一步的回答可以看
http://ask.csdn.net/questions/172456
和你的问题本质上一样
解决方案三:
p.method(i); 此时传人的i=10; 这是执行方法的结果为20;
i不变i=10,此时继续执行输出语句i=10, j=20
解决方案四:
类似C语言的值传递和地址传递吧,
解决方案五:
在java中有两种传递方式,一种是按引用传递,一种是按值传递。
在调用函数的时候,你的i和x是按值传递的,就是说,x创建了1个i的副本,复制的是地址!
x的变化跟i没有关系。
而按引用传递是复制指针,而不是地址!如果x的地址变了,那么i和x的指针都会指向新的同一个地址,则x和i值还是一样。
在java中调用函数的时候,参数都是按值传递的,只要记住这点以后就不会犯错了!
解决方案六:
i=10传给x,x=10*2=20,所以输出20,i此时还是10,直接输出10
解决方案七:
对,传递的是一个值,不会改变原来地址所存储的值
解决方案八:
java中的传递,是传递的拷贝
i那个地址块存的是数值10,而不是地址,拷贝后的值传递给x也就是x等于10
所以方法中打印的x是20,但i依然是10
如果传递的参数是对象类型的话,那么传递的是对象的地址的拷贝
解决方案九:
这个问题你应该说说哪里不懂,你的思路咋样地,这个确实无法给你解释,怎么分析怎么那样的值啊。
解决方案十:
Java参数传递分为值传递和引用传递,基本数据类型传递的是数值的拷贝。JVM运行Java代码时,是以栈这种数据结构完成方法调用的,每个方法都是一个栈帧,有自己操作数栈,它操作的形参的初始值是调用方法传递过来的,只是复制了一份存放在自己的操作数栈中。main方法i的值和method方法中形参的值i是不同的存储区域。所以method方法修改i之后对main方法没有影响。即:数值传递不会改变原来参数的值。