为什么不能在Java中使用变量名?

时间:2013-12-19 18:54:50

标签: java pointers

例如,假设我想创建5个变量:

int a1 = 1;
int a2 = 2;
int a3 = 3;
int a4 = 4;
int a5 = 5;

为什么不能使用循环来执行此操作:

for(int i=0;i<5;i++)
    int "a"+i = i; // syntax is just an example

甚至:

int a1, a2, a3, a4, a5;
for(int i=0;i<5;i++)
    "a"+i = i; // syntax is just an example

我认为这是不可能的,因为我从来没有见过它。但为什么不呢?它在语法上是不可能的吗?或者是因为它的实施会带来更多问题而不是优势?

在某些情况下,能够根据其名称在算法上引用指针会很好。

4 个答案:

答案 0 :(得分:2)

因为Java是强类型语言 根据{{​​3}}

  

Java编程语言是一种强类型语言,这意味着每个变量和每个表达式都具有在编译时已知的类型。强类型有助于在编译时检测错误。

答案 1 :(得分:1)

使用Java中的动态变量命名无法完成您要做的事情,这在语法上无效。有更好的方法可以做到这一点,比如使用数组:

int[] a = new int[5];
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;

for(int i=0; i<5 ;i++) {
   a[i] = i;    
}

答案 2 :(得分:0)

  

或者是因为它的实施会带来更多的问题而不是优势?

是的,你对这个陈述基本上是正确的。局部变量在很大程度上取决于最高效率,任何允许它们在运行时被反射引用的机制都无法匹配实际系统的性能,而实际系统的局部变量名称仅用于“连接点”。机器代码级别和变量很可能是CPU寄存器或硬编码堆栈偏移量。

能够引用局部变量也会导致概念问题:它会使本地变量成为一流的,因此可以从方法返回这样的引用。显然,从方法返回局部变量是一个定义不明确的概念。

答案 3 :(得分:0)

你想要实现的目标有点棘手......

Map<String, Integer> arrayLikeMap = new HashMap<>();
for(int i = 1; i <= 5; i++) {
    arrayLikeMap.put("a"+i, i);
}

您可以将值设为arrayLikeMap.get("a"+1);