为什么我不能在Java中声明两次相同的变量?

时间:2015-12-03 00:03:39

标签: javascript java

这里有类似的问题,但他们并没有真正回答我的问题。

所以我很好奇为什么我们不能在Java中声明两次相同的变量?

例如:

  int a = 4;
  int a = 6;

这在Java中确实起作用。

然而,在javascript中,这实际上有效:

var a = 1;
var a = 2;

在javascript中,人们说声明立刻被移到了开头,所以它变成了这样:

var a;
a = 1;
a = 2;

3 个答案:

答案 0 :(得分:3)

简单明了的答案是因为编译器不允许你这样做。但现在让我们更进一步 - 为什么会这样呢?

这里的原因是两次声明变量是错误的标志。它通常意味着三件事之一:

  1. 您的变量名称不够具体。也许你曾两次使用int length,它会咆哮你。您可能应该使您的名称更加具体到它的长度,例如复制数组时的int originalLengthint extendedLength
  2. 你的方法太长了。你的方法为什么这么长,你需要两个相同的变量?您可能会重复复制代码,因此请将其合并到方法中。
  3. 你还没有真正考虑过你的方法。这是2号的扩展,但事实是你应该在编写之前决定方法的作用。如果您要添加已存在的变量,则可能意味着您尚未确定此方法正在执行的操作。
  4. 每一个都是一个主要的代码气味,可能是路上的虫子的来源。 (并且在不远的路上!)在每种情况下,允许你两次声明一个变量会导致模糊,如果它阻止你编译就会被阻止。

    现在,这是否意味着它可能不是很好的情况?当然。可能有。也许你已经涵盖了所有的基础,你绝对相信重用那个变量是可以的。在这种情况下,只需重新分配它而不是重新声明它。就我个人而言,我建议不要这样做,但如果你愿意的话,那就是你的脚。 :)

答案 1 :(得分:0)

如果范围不重叠,你可以使用相同的变量名,例如我可以在名为“var1”的私有方法中有一个变量,然后在另一个方法中有相同的东西,这两个不会冲突

然而,因为每次我在同一范围内使用“int var1”,java都会重新声明变量,它不会允许它,因为它是一个冲突的变量名,而在java脚本中,声明只发生一次,因为它是弱类型的

答案 2 :(得分:0)

现在它已经使用新的let关键字在javascript中进行了纠正或即兴创作 如果您尝试多次初始化相同的变量名称,则会抛出错误

      let a = 4;
      let a = 5;

将在ES6中抛出错误