【发布时间】:2014-05-19 12:40:04
【问题描述】:
C++ 代码在 java 中的等价物是什么:
#define printVar(var) cout<<#var<<"="<<var;
打印字符串值及其名称。
【问题讨论】:
C++ 代码在 java 中的等价物是什么:
#define printVar(var) cout<<#var<<"="<<var;
打印字符串值及其名称。
【问题讨论】:
从Java 8版本开始可以打印变量名:Java Reflection: How to get the name of a variable?
您可以使用类似的方式打印值:System.out.println(String.valueOf(var));
通过Java reflection可以从一个变量中获取更多的信息,比如类名、包名、类属性等...
【讨论】:
Java 没有执行此操作的标准预处理器。一般来说,这是一件好事。在这种情况下,您可以使用您自己的。
我建议您使用 IDE 中的调试器来调试您的程序,这样就无需编写代码将此类调试语句转储到控制台。注意:在 Java 中,使您的代码始终可调试几乎不会受到任何惩罚,并且大多数代码都带有调试功能。
如果你对一行进行断点,你可以看到局部变量的所有值以及它们指向的任何对象。如果需要,您还可以向下堆栈并查看所有调用者。
【讨论】:
在 Java 中没有预处理器指令,因此在这种情况下,除了使用 IDE 的快捷方式(通常是“soutv + tab”,例如,在 InteliJ IDEA 和 Netbeans 中有效)之外,没有其他选择。所以你会得到默认模板的输出:
System.out.println("var = " + var);
或者您可以实现执行此操作的常用方法:
void printVariable (Object variable, String name) {
System.out.println (name + " = " + variable);
}
并以这种方式运行:
printVariable (var, "var");
printVariable (anotherVar, "anotherVar");
更新:根据this answer,在 Java 8 中可能有一种方法可以通过反射(在某些情况下)
【讨论】:
通常您没有针对 Java 的预处理。但类似的行为方法是:
public static void printVar(String var) {
System.out.print("var=", var);
}
【讨论】: