如何将对象名称与Java中的字符串进行比较?
例如:
class_name obj = new class_name();
我希望将对象名称obj
与字符串进行比较。这样做的正确方法是什么?
答案 0 :(得分:8)
这不能直接在Java中完成。变量名称仅仅是程序员的便利,在编译代码后甚至无法跟踪。您可以使用Map
将字符串标识符映射到其对应的对象。或者,您可以在类中添加name
字段,其中包含字符串(示例中为"obj"
):
ClassName obj = new ClassName("obj");
if (obj.getName().equals(...))
...
(请注意,我采用了更标准的命名约定。)
答案 1 :(得分:0)
==
比较对象引用。它会发现两个操作数是否指向同一个对象。
如果要检查两个字符串是否包含相同的字符,则需要使用equals
比较字符串。
关于你的具体问题,不能这样做。
答案 2 :(得分:0)
您可以通过调用obj.getClass()
来获取班级的班级名称。您无法通过常规方式获取对象的变量名称。
答案 3 :(得分:0)
您可以使用instanceof
关键字
查看此示例以获取更多详细信息
public void checkType(Object param) {
if( param instanceof String) {
System.out.println("param is a String");
}
else if( param instanceof Integer) {
System.out.println("param is an Integer");
}
}
我认为这是正确的做法.. !!
您可以查看here了解更多详情
答案 4 :(得分:0)
如果要访问局部变量,并且如果使用javac -g
选项编译源代码以保留调试信息,则Bytecode Library like ASM可用于检索此详细信息。见4.3. Debug
使用javac -g编译的类包含其源文件的名称, 源代码行和字节码指令之间的映射,以及 源代码中的局部变量名与本地变量之间的映射 字节码中的可变槽。此可选信息用于 调试器和异常堆栈跟踪可用时
如果要检索类级别/字段变量的名称,可以使用java reflection API。