gpt4 book ai didi

java - 为什么在java中方法外的变量可以有重复的变量名?

转载 作者:行者123 更新时间:2023-12-01 16:13:39 25 4
gpt4 key购买 nike

我正在学习 Java,并且我知道您不能将内部作用域中声明的变量命名为与外部作用域中声明的变量相同的名称,如下所示

public class Practice {
public static void main(String[] args){
int x = 10;
if (x == 10){
int x = 10;
}
}
}

但是,我注意到以下内容并不违法

public class Practice {
int x = 10;
public static void main(String[] args){
int x = 10;
if (x == 10) {
}
}
}

这不是声明了两次的变量吗?

最佳答案

Is this not a variable that is declared twice??

不,事实并非如此。因为两者属于不同的范围。 main 函数外部的 x 具有类级别作用域,而 main 内部的 x 具有方法/函数级别范围

不同作用域的两个变量具有相同的名称是合法的。

请务必阅读§6.3. Scope of a Declaration来自JLS。以下是该部分的一些声明。

The scope of a declaration is the region of the program within which the entity declared by the declaration can be referred to using a simple name, provided it is visible (§6.4.1).

A declaration is said to be in scope at a particular point in a program if and only if the declaration's scope includes that point.

The scope of a local variable declaration in a block (§14.4) is the rest of the block in which the declaration appears, starting with its own initializer and including any further declarators to the right in the local variable declaration statement.

有很多与范围相关的概念,例如阴影,因此请阅读§6.4. Shadowing and Obscuring .

JLS 是了解 Java 中允许和不允许的内容的最佳场所。请随意阅读那里的部分。

关于java - 为什么在java中方法外的变量可以有重复的变量名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62461368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com