我正在研究使用static关键字,并发现如果一个变量被创建为static,那么就会创建一个副本并在该类的所有对象之间共享。
但是下面代码的输出让我感到困惑,为什么它没有显示递增的值。
sudo install_name_tool -change @rpath/CUDA.framework/Versions/A/CUDA \
/Library/Frameworks/CUDA.framework/Versions/A/CUDA \
/usr/local/cuda/lib/libcuda.dylib
我期待输出为:
public class Test {
static int y = 10;
public static void main(String[] args) {
System.out.println(y);
System.out.println(y+1);
System.out.println(++y);
System.out.println(y--);
}
}
但实际输出是:
10
11
12
12
请帮我理解输出。
答案 0 :(得分:5)
让我们回顾一下打印陈述,看看会发生什么:
System.out.println(y); // value of y is 10 -> print 10
System.out.println(y+1); // value of y is still 10, but we print 10 + 1 -> print 11
System.out.println(++y); // value of y becomes 11 before we print -> print 11
System.out.println(y--); // value of y becomes 10 after we print -> print 11
这个问题与静态变量几乎没有关系。
y
可以是局部变量,
行为将是完全相同的。
要理解第3和第4个陈述, 阅读前缀运算符和后缀运算符。
答案 1 :(得分:0)
实际输出正确
Y + 1不会更改变量y的值。 所以y只会是10。当您执行++ y时,它将值更改为11。