static int j = 20;
public static void main(String[] args) {
int i = 10;
Demo2 d2 = new Demo2();
d2.method(i);
System.out.println(i);
System.out.println(j);
}
public void method(int x){
x = x * 2;
j = j * 2;
}
作者: lxww 时间: 2013-3-19 21:54
i 是局部变量,只在当前方法内有效,所以i的值不变,
j是静态变量。会随着类的加载而加载。它被声明成静态,存在于静态去内。用方法直接调用可以直接使用,所以j=20*2=40.作者: 全超 时间: 2013-3-19 22:19
class Demo2 {
static int j = 20;//这里是静态变量,
public static void main(String[] args) {
int i = 10;//这里是局部变量
Demo2 d2 = new Demo2();//这里创建了一个对象并且调用方法运算
d2.method(i);//调用方法时程序转入下面,运算结束变量的值已经改变
System.out.println(i);//此时i为本函数中的10
System.out.println(j);
}
public void method(int x){
x = x * 2;//x无法接收主函数方法中定义的i,因为i只在主函数中有效
j = j * 2;//这里j接收到的是上面的20*2=40 此时对象中的j变量是40,j值已经改变
}
}作者: 陈丽莉 时间: 2013-3-20 04:00
若还有问题,请继续追问;没有的话,请将帖子分类改成【已解决】~作者: 梁志兵 时间: 2013-3-20 09:58
局部变量只作用于局部,int i = 10 在局部就直接打出i 的值是10了作者: 我手心里的宝 时间: 2013-3-20 10:08
public class Demo2 {
static int j = 20;//这个j是类变量 所有对象都共享一份,类变量不在堆内存中,任何一个对象对其修改,j 的值都会变化
public static void main(String[] args) {
int i = 10;
Demo2 d2 = new Demo2();
d2.method(i);//这个方法只是改变了method方法中局部变量的值
System.out.println(i); //你打印的是i的值 我估计你是纠结在了为什么打印的不是20 记住方法中你只是传值 就可以了
System.out.println(j);
}
public void method(int x){
x = x * 2;//这个地方 x是个局部变量,你传进来的只是i得值 x的值是20
j = j * 2; //在d2这个对象里修改了j的值 所以j的值变成了40
}
}作者: 江公亮 时间: 2013-3-20 10:39
public class Demo2 {
static int j = 20;
public static void main(String[] args) {
int i = 10;
Demo2 d2 = new Demo2();
d2.method(i); System.out.println(i); System.out.println(j);
}
public void method(int x){
x = x * 2;
j = j * 2;
}
}
因为 i 是局部变量,传进method()的 i 只是原来的副本,并且离开method的之后,此副本就被销毁,所以红色部分访问的 i 还是原来的值,i 并未发生改变。!
如果确实需要达到改变i的效果,可以修改method,让它有返回值!