2 yixin5733 yixin5733 于 2016.01.20 16:50 提问

java中static定义变量

运行结果为什么是0不是1?图片图片

9个回答

caozhy
caozhy   Ds   Rxr 2016.01.20 17:02

因为你定义了参数x
根据就近原则,你的x++访问的是这个参数x变量,而不是成员变量x

a510835147
a510835147   2016.01.20 17:04

因为你的参数名也叫x,x++ 这里是将参数x自增,不是全局变量x。 所以全局变量x里面的值还是0.

lijianhuilijie
lijianhuilijie   2016.01.20 17:21

class Test
{
public static int x = 9;

public static void name(int x)
{
    x ++;
    System.out.println(x);  //为10
}

public static void main(String[] args)
{
    name(x);
    System.out.println(x);  //为9
}

}

lijianhuilijie
lijianhuilijie static 修饰的变量存放在jvm的方法区,而方法中的局部变量(name(int x))则存放在jvm的栈中,当传参的时候先把值传递到方法中,方法中的局部变量获取这个值执行++后压栈,此时数据保存在栈中而非方法区,所以main函数中使用的是方法区中的成员变量,值未发生改变
接近 2 年之前 回复
zhihan_tu
zhihan_tu   2016.01.20 17:37

这个其实是参数传递的问题,你只是把全局变量x的值传递给了形参x,x++只对形参也就是局部参数做了自增操作,全局变量x的值还是0,当name()方法
调用完毕后,这个形参就销毁了,而你输出的却是全局变量x

danielinbiti
danielinbiti   Ds   Rxr 2016.01.20 17:03
 void name(int x){
   x++;//这里x累加的是局部变量x,不是类中定义静态变量x,所以累加和静态变量x无关,值不改变,还是0
 }
danielinbiti
danielinbiti 回复yixin5733: main方法里没有定义x变量,所以访问的是静态变量x
接近 2 年之前 回复
yixin5733
yixin5733 那打印的x为啥是静态变量不是自增的那个变量
接近 2 年之前 回复
u011008785
u011008785   2016.01.20 17:26

x++和main方法没有直接关系

enpterexpress
enpterexpress   2016.01.20 16:58

把打印方法写在方法里面的x++后面试试

enpterexpress
enpterexpress 修改以后你就知道怎么回事了,现在小学生都这么屌了
接近 2 年之前 回复
yixin5733
yixin5733 我只是想问问这个到底是怎么回事,不需要修改啦~
接近 2 年之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.01.20 17:02
    因为这个方法调用传入的是行参值0,方法中是对方法的参数x的自增操作,而不是静态成员变量的自增。如果修改方法不设置参数,改为name()就是1了。
yhc19850706
yhc19850706   2016.01.20 17:00

java中i=i++问题分析

请参考:http://www.importnew.com/17056.html

里面有详细的解释,与static无关,即使不用static还是0

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!