数组元素能否引用整数变量名而非匹配对应变量的取值?
问题解答
首先明确结论:针对你示例中使用的基础类型int,这个需求无法直接实现。
原因说明
Java中基础类型的赋值/传值逻辑是值拷贝:你将变量k放入数组时,实际上只是把k当前存储的数值5复制了一份存入数组对应的内存位置,数组内的元素和原变量k没有任何绑定关系,后续你读取array[3]时只能拿到它的数值,根本无法追溯这个数值来源于哪个变量。你现在写的array[3] == k只能判断两者的数值是否相等,完全达不到判断是否是同一个变量的目的。
替代实现方案
如果确实需要实现这个需求,你可以把整数封装为自定义对象,利用Java对象的引用传递特性来实现判断:
// 自定义整数包装类,避免原生Integer的常量池缓存干扰 class IntWrapper { public int value; public IntWrapper(int value) { this.value = value; } } // 实际使用示例 public class Test { public static void main(String[] args) { IntWrapper k = new IntWrapper(5); IntWrapper[] array = { new IntWrapper(1), new IntWrapper(2), new IntWrapper(3), k, new IntWrapper(5) }; // ==判断引用地址是否相同,也就是是否指向同一个对象(即变量k本身) if (array[3] == k) { System.out.println("array[3]是变量k本身"); // 该分支会命中 } if (array[4] == k) { System.out.println("array[4]是变量k本身"); // 该分支不会命中,哪怕两者value都是5 } } }
注意事项
如果你想用Java自带的Integer类实现,要注意JVM会默认缓存-128~127范围内的Integer对象,直接用Integer.valueOf(5)、Integer k = 5这类方式得到的都是缓存池里的同一个对象,会干扰引用判断,建议要么用自定义包装类,要么统一用new Integer(数值)的方式创建对象绕开缓存。
内容的提问来源于stack exchange,提问作者SomeoneNeedsHelp
相关产品推荐
相关产品推荐

