Warm tip: This article is reproduced from serverfault.com, please click

其他-在Java中使用动态名称分配变量

(其他 - Assigning variables with dynamic names in Java)

发布于 2011-07-18 07:06:08

我想在Java中分配一组变量,如下所示:

int n1,n2,n3;

for(int i=1;i<4;i++)
{
    n<i> = 5;
}

如何用Java实现呢?

Questioner
Ashish Anand
Viewed
11
Stephen C 2019-01-07 16:41:45

这不是你在Java中做事的方式。Java中没有动态变量。Java变量必须在源代码1中声明

根据你要实现的目标,应使用数组aList或a Map例如

int n[] = new int[3];
for (int i = 0; i < 3; i++) {
    n[i] = 5;
}

List<Integer> n = new ArrayList<Integer>();
for (int i = 1; i < 4; i++) {
    n.add(5);
}

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

可以使用反射来动态引用源代码中已声明的变量。但是,这适用于属于类成员的变量(即静态字段和实例字段)。它不适用于局部变量。参见@fyr的“快速而肮脏”的示例。

但是,在Java中不必要地执行此类操作不是一个好主意。它效率低下,代码更加复杂,并且由于你依赖运行时检查,因此它更加脆弱。这不是“带有动态名称的变量”。最好将其描述为对具有静态名称的变量的动态访问。


1-该陈述有点不准确。如果使用BCEL或ASM,则可以在字节码文件中“声明”变量。但是不要这样做!那就是疯狂!