public class Test
{
public static void leftshift(int i, int j)
{
i+=j;
}
public static void main(String args[])
{
int i = 4, j = 2;
leftshift(i, j);
System.out.println(i);
}
}
为什么输出的i值不是6? 作者: 安路凤 时间: 2012-5-5 19:46
因为你输出的是i值,
你的方法里根本没有返回值,
虽然你调用了方法,但是并没有取得返回值
所以输出的也不是方法里运算以后的值,而是你在main方法里初始化的值
我给你改了一下代码
public static int leftshift(int i, int j)
{
i+=j;
return i; //这里要返回值
}
public static void main(String args[])
{
int i = 4, j = 2;
希望能帮到楼主。作者: Friends★ 时间: 2012-5-5 19:54
修改的代码
public class Test1
{
public static void leftshift(int i, int j)
{
i+=j;
System.out.println("i="+i);
}
public static void main(String args[])
{
int i = 4, j = 2;
leftshift(i, j);
}
}
运行结果:i=6作者: 魏涞 时间: 2012-5-5 19:54
public class Test
{
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在leftshift()内有效,虽然结果为i=6,但leftshift()运行完后,i=6就释放掉了,
System.out.println(i); // 这里的i为主方法中的i
}
} 作者: 任睦强 时间: 2012-5-5 19:59
因为int是基本数据类型,他传递的是值,虽然在leftshift()方法中改变了i的值,但是i一出这个方法还是原来的值,方法内改变值不影响方法外的值。作者: 谭景宾 时间: 2012-5-5 20:02
因为leftshift方法和main方法里都有i,两个函数里的i没有关联,你调用leftshift(i, j)时,只是将leftshift函数里的方法i赋值而已,main方法里的i没有变化
而你打印的i是main方法里的,i=4作者: 攻城狮 时间: 2012-5-5 20:03
public class Test
{ static int i=4;//全局变量
public static int leftshift(int j)
{
i+=j;
return i;
}
public static void main(String args[])
{
int j = 2;
leftshift(j);
System.out.println(i);
}
} 作者: 何阳 时间: 2012-5-6 20:34
public class Test
{
public static void leftshift(int i, int j)
{
i+=j;
}
public static void main(String args[])
{
int i = 4, j = 2;
leftshift(i, j);
System.out.println(i);
}
}
为什么输出的i值不是6?
//这个问题设计到变量的生命周期问题
//你在一个方法中定义了2个变量,那个这2个变量的生命周期就是在这个局部的代码块
//就是我们所说的局部变量
//主函数只不过是将当前的值复制给了方法中的2个变量
//这个时候调用leftshift(),方法进栈,然后运行方法,然后方法出栈,那么在方法中的
//局部变量也随着结束,主函数依旧执行,访问的是主函数中的i,输出的是4,
//如何你想输出结果是6,你可以这样做
// public static void leftshift(int i, int j)
{
i+=j;
System.out.println(i);
}