比较对象名(引用名称)与字符串

3
如何在Java中将对象名称与字符串进行比较?
例如:
class_name obj = new class_name();

我想比较对象名obj和一个字符串,正确的方法是什么?


3
那是完全不可能的。你试图解决什么问题? - SLaks
2
请不要在类名中使用下划线。Java 命名规范:类名应为名词,采用混合大小写,每个单词的首字母大写。 遵守此规范可以让其他开发人员在阅读您的代码时不会感到不适。 - Kaadzia
@Ask_it 你有没有检查过我的答案? - Dileep
5个回答

8
在Java中不能直接做到这一点。变量名称仅是程序员的方便,并且在编译代码后甚至不会被跟踪。您可以使用一个将字符串标识符映射到其相应对象的Map。或者,您可以向您的类添加一个包含字符串(例如"obj")的name字段:
ClassName obj = new ClassName("obj");

if (obj.getName().equals(...))
    ...

(请注意,我假设使用了更标准的命名约定。)

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");
  }
}

我相信这是正确的做法..!!

您可以在这里查看更多细节


0

==比较对象引用。它会找出两个操作数是否指向相同的对象。

如果您想检查两个字符串是否包含相同的字符,需要使用equals来比较字符串。

至于您具体的问题,无法完成。


0

通过调用obj.getClass(),你可以获得类的类名。但是你不能通过常规方式获取一个对象的变量名。


或通过任何其他方式,因为此信息不在字节码中。 - eis

0

如果您想要访问本地变量,并且源代码是使用javac -g选项编译以保留调试信息,则可以使用Bytecode Library like ASM来检索此详细信息。请参见4.3. Debug

使用javac -g编译的类包含其源文件的名称,源行号和字节码指令之间的映射,以及源代码中局部变量名称与字节码中局部变量插槽之间的映射。当可用时,调试器和异常堆栈跟踪中使用此可选信息。

如果您想要检索类级别/字段变量的名称,则可以使用java reflection API


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接