黑马程序员技术交流社区
标题:
求助
[打印本页]
作者:
乐凡
时间:
2012-8-13 22:00
标题:
求助
本帖最后由 乐凡 于 2012-8-13 22:01 编辑
package cn.itcast;
public class TestDemo
{
public static void leftshift(int i, int j)
{
i+=j;
}
public static void main(String args[])
{
int i = 4, j = 2;
leftshift(i, j); //i 经过计算不是6了吗 怎么打印结果为4啊?不解啊
System.out.println(j);
}
}
作者:
周瑞
时间:
2012-8-13 22:12
public class TestDemo
{
public static void leftshift(int i, int j)
{
i+=j;
}
public static void main(String args[])
{
int i = 4, j = 2;
leftshift(i, j); //这里你你调用了 leftshift(i, j)方法,你需要将i和j的值作为参数传递给此函数,而在java中基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的。所以你在 leftshift函数中执行的i+=j;并不会改变原有的i值,而i在这函数中的值为4,所以结果为4
System.out.println(j);
}
}
复制代码
作者:
王舜民
时间:
2012-8-13 22:14
本帖最后由 王舜民 于 2012-8-13 22:18 编辑
public class TestDemo
{
public static void leftshift(int i, int j)
{
i+=j;
}
public static void main(String args[])
{
int i = 4, j = 2;
leftshift(i, j); //i 经过计算不是6了吗 怎么打印结果为4啊?不解啊
System.out.println(j); //
打印的值是根据上面主函数 int i = 4, j = 2; 而定的
}
}
System.out.println(j); 打印的是j
永远是2不会改变。除非你打的是 i 结果才永远为4.
=
/这里你你调用了leftshift(i,j)方法,你需要将i和j的值作为参数传递给此函数,而在java中基本类型作为参数传递时,无论你在leftshift(i,j)方法怎么折腾,主函数i,j值是不会改变的。还有在Java中对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数。你可以百度下
“形参和实参
”加深理解
不信你可以改成这样就知道了
package cn.itcast;
public class TestDemo
{
public static void leftshift(int i, int j)
{
i=444;
j=222;
}
public static void main(String args[])
{
int i = 4, j = 2;
leftshift(i, j); //
System.out.println(i); 还是 4
System.out.println(j); 还是 2
}
}
作者:
谭培龙
时间:
2012-8-13 22:15
本帖最后由 谭培龙 于 2012-8-13 22:19 编辑
因为这2个变量定义在main函数,这个是引用传递,并没有对变量进行重新赋值。所以j和i的值一直都在栈内存中没有改变。
修改了代码 这样就能算出是6
class TestDemo
{
public static int leftshift(int i, int j)
{
return i+=j;
}
public static void main(String args[])
{
int i = 4, j = 2;
int x =leftshift(i, j); //i 经过计算不是6了吗 怎么打印结果为4啊?不解啊//用一个变量记住这个值
System.out.println(x);
}
}
复制代码
作者:
王舜民
时间:
2012-8-13 22:20
你看一下这个帖子估计就清楚了
http://bbs.itheima.com/thread-22268-1-1.html
作者:
乐凡
时间:
2012-8-13 22:22
谢啦 兄弟
作者:
杨彪
时间:
2012-8-13 22:26
首先你得了解它在内存上是怎么走的,还有就是成员变量的作用域 ,
成员变量:针对整个类都有效。
局部变量:在某个范围内有效。(一般指的就是方法,语句体内)
首先在主方法中有两个成员变量 int i = 4, j = 2; 然后调用leftshift(i, j);方法是传递的地址值 而 leftshift()在另一块空间 虽然把 i ,j的值传了过去 但是在leftshift()中, 所以在主方法中打印 i, j 的值不变
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2