println和printf在Jshell中有什么不同。

huangapple go评论76阅读模式
英文:

How are println and printf different in Jshell

问题

为什么在 JShell 中,println 和 printf 显示不同?

我最近了解了一些关于 JShell 的内容,想尝试一些东西,然后我遇到了这个情况。

println和printf在Jshell中有什么不同。

为什么 println 的输出是普通输出,而 printf 的输出却包含了那么多内容?

英文:

Why are println and printf displayed differently in Jshell??

I recently found out about JShell stuff and wanted to try a few things and I came across this.

println和printf在Jshell中有什么不同。

Why is output for println a plain output and output for printf all those stuff??

答案1

得分: 1

printf 返回一个 PrintStream,所以 jshell 正在显示将返回值转换为字符串的结果($1$2 之后的内容),之所以以那种方式显示,是因为 PrintStream 没有覆盖 toString 方法,所以它使用的是 来自 Object 的方法

正如 Rogue 在评论中指出的,由于 printf 除非被指示,否则不会打印换行符,所以你会在与打印值相同的行上看到返回值。

println 不返回任何内容,所以只会显示打印出来的值(和一个换行符)。

英文:

printf returns a PrintStream, so jshell is showing you that returned value converted to a string (the stuff after $1 and $2), which is shown that way because PrintStream doesn't override toString so it uses the one from Object.

As pointed out by Rogue in the comments, since printf doesn't print a newline unless instructed to, you see the return value on the same line as the printed value.

println returns nothing, so you're only shown the printed value (and a newline).

huangapple
  • 本文由 发表于 2020年9月24日 15:18:37
  • 转载请务必保留本文链接:https://go.coder-hub.com/64041334.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定