我用intellij编写了以下Java代码:
public class Main {
public static void main(String[] args) {
int[] a = {1,1,1,1,1,1};
for(int i = 0; i < a.length; ++i) {
a[i]++;
}
}
}
接下来,像这样在for循环内设置一个断点。
接下来,我进入“查看断点”菜单,可以通过ctrl + shift + f8进行访问,并为我的断点输入这些设置。
然后,我点击调试按钮,我的输出是这样的:
void
1
void
1
void
1
void
1
void
1
void
1
为什么intellij在输出中打印“void”?
最佳答案
这是因为println()
方法被声明为void
。当您在 Debug模式下评估表达式时,它将根据表达式的结果生成一个文字值。因此,当您评估表达式System.out.println(a[i])
时,您实际上是在告诉调试器打印方法返回值的内容,该值恰好是void
。碰巧在该方法中执行了一个额外的println(int)
方法调用,从而使实际求值表达式基本上等效于该puedocode System.out.println(System.out.println(a[i]))
(尽管实际上Java实际上并不将void
视为真实类型,因此您将无法以实际执行所编写的代码)。PrintStream.println(int)
方法的JavaDoc可用here(对于Java 9),并且您可以查看here方法的源代码(来自OpenJDK JDK版本8u40-b25,又名Java 8)。
请考虑以下方法:
void evaluatesToVoid(){
final int[] a = {1,1};
for(int i = 0; i < a.length; ++i) {
System.out.println(a[i]);
}
return;
}
int evaluatesToSeven(){
return 7;
}
当评估返回有效返回类型(例如原始类型int
)的方法调用时,您将获得该方法的返回值。使用评估并登录
evaluatesToVoid()
将输出以下内容:void
1
1
使用评估并登录evaluatesToSeven()
将输出以下内容:7
关于java - 为什么将评估日志用作断点时intellij打印 “void”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50189675/