我正在做一些关于Java的工作,作为我课程的一部分,我坚持的问题是:
考虑以下代码,说明类MyClass,它的实例变量i和j,以及它的单个方法foo:
class MyClass
{
int i = 0;
int j = 10;
public void foo()
{
j = 20;
{
int j = 11;
i = 10;
j = 10;
}
System.out.println("i, j = " + i + ", " + j);
}
}
假设我们构造了这个类的对象并调用它的方法foo,方法foo的输出是什么?
我一直在苦苦挣扎一段时间。起初我认为它与增量运算符或/ while循环有关,但我不确定。
我不是在找人给我答案,但我真的可以在正确的方向上轻推。
答案 0 :(得分:2)
我已经注释了代码以便更好地理解:
class MyClass
{
int i = 0;
int j = 10;
public void foo()
{
j = 20;
{ // code block
int j = 11; // new J only lives till the curly brace ends (local scope)
i = 10; // i updated
j = 10; // the new scoped j variable updated
} // new scoped j not available now
// original j (20) and old i with updated value available
System.out.println("i, j = " + i + ", " + j);
}
}
答案 1 :(得分:0)
您的代码是Shadowing的一个很好的例子。在花括号{...}中,因为你声明/初始化 int j = 11 ;
所以在花括号中,无论你赋予它什么值,它都会在你的代码离开大括号时丢失。
但是,因为'i'仅被声明为实例变量,然后在花括号中初始化,所以它维持在花括号内分配给它的值10并保持在外面花括号。
因此,您的输出将是 i,j = 10,20
阅读Java中的Shadowing。 希望它能回答你的问题..