System.out.print() 是如何工作的?

2023-12-03

我使用Java已经很长时间了,我想知道这个函数是如何实现的System.out.print() works.

这是我的疑问:

作为一个函数,它在某处有一个声明io包裹。但是 Java 开发人员是如何做到这一点的呢?因为这个函数可以接受任意数量的参数和任意参数类型,无论它们如何排列?例如:

System.out.print("Hello World");
System.out.print("My name is" + foo);
System.out.print("Sum of " + a + "and " + b + "is " + c);
System.out.print("Total USD is " + usd);

无论变量的数据类型是什么a, b, c, usd, foo或者它们是如何通过的,System.out.print()永远不会抛出错误。

对我来说,我从来没有参与过任何有这样要求的项目。前提是,如果我遇到这样的需求,我真的不知道如何解决。

谁能向我解释它是如何完成的?


System.out只是一个实例PrintStream。你可以检查它的JavaDoc。其可变性基于方法重载(多个方法具有相同的名称,但具有不同的参数)。

该打印流将其输出发送到所谓的标准输出.


在你的问题中你提到了一种称为可变参数函数 (or varargs)。不幸的是,这不支持PrintStream#print,所以你一定把它误认为是其他东西了。然而,用 Java 实现这些是非常容易的。只需检查文档即可。


如果您好奇 Java 如何知道如何连接非字符串变量"foo" + 1 + true + myObj,它主要是Java编译器的职责。

当连接中没有涉及变量时,编译器只是连接字符串。当涉及到变量时,连接会被转换为StringBuilder#append链。生成的字节码中没有串联指令;即+运算符(当谈论字符串连接时)在编译期间解决。

Java中的所有类型都可以转换为字符串(int通过方法Integer class, boolean通过方法Boolean类,对象通过自己的#toString,...)。如果有兴趣可以查看StringBuilder的源代码。


UPDATE:我自己很好奇并检查了(使用javap)我的例子是什么System.out.println("foo" + 1 + true + myObj)编译成.结果:

System.out.println(new StringBuilder("foo1true").append(myObj).toString());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

System.out.print() 是如何工作的? 的相关文章

  • 在Windows Server 2003下如何在本地系统帐户下运行jvisualvm.exe?

    我在带有 Java 1 6 u 20 的 Windows Server 2003 下将 GlassFish 3 0 1 作为 Windows 服务运行 总体上我很满意 我希望能够在这个 JVM 上使用 VisualVM 并使用无法在 Tom
  • 连接外部 Accumulo 实例和 java

    我正在尝试使用 Accumulo 连接到虚拟机 问题是 我无法将其连接到 Java 中 我可以看到 Apache 抛出的网页 但我无法让它与代码一起工作 我认为这是缺乏知识的问题而不是真正的问题 但我找不到这方面的文档 所有示例都使用 lo
  • Kafka - 如何同时使用过滤器和过滤器?

    我有一个 Kafka 流 它从一个主题获取数据 并且需要将该信息过滤到两个不同的主题 KStream
  • 使用 Exec Maven 插件分叉 Java,而不使用“exec”目标

    来自文档 https www mojohaus org exec maven plugin exec exec在单独的进程中执行程序和Java程序 exec java在同一虚拟机中执行 Java 程序 我想 fork 一个 java 程序
  • 通过Zuul上传大文件

    我在通过 zuul 上传大文件时遇到问题 我正在使用 apache commons 文件上传 https commons apache org proper commons fileupload https commons apache o
  • 自定义列表字段点击事件

    我正在编写一个应用程序 其中我创建了用于显示列表视图的自定义列表字段 我的 CustomListField 包含连续的一个图像和文本 我正在通过单击列表字段行获取字段更改侦听器 但我也想将字段更改侦听器放在图像上 谁能告诉我我该怎么做 这是
  • 使用 OkHttp 下载损坏的文件

    我编写的下载文件的方法总是会产生损坏的文件 public static String okDownloadToFileSync final String link final String fileName final boolean te
  • 如何使用 Java Apache POI 隐藏 Excel 工作表中以下未使用的行?

    我正在使用数据库中的数据填充模板 Excel 工作表 for Map
  • JAXB - 忽略元素

    有什么方法可以忽略 Jaxb 解析中的元素吗 我有一个很大的 XML 文件 如果我可以忽略其中一个大而复杂的元素 那么它的解析速度可能会快很多 如果它根本无法验证元素内容并解析文档的其余部分 即使该元素不正确 那就更好了 例如 这应该只生成
  • ThreeTen 向后移植与 JSR-310 的比较

    由于某些原因 我们现在无法使用 java 8 我们仍然停留在 java 7 上 不过 我想使用新的JSR 310 date time APIs现在 使用官方向后移植 ThreeTen http www threeten org threet
  • 为什么解析这个 JSON 会抛出错误?

    我正在尝试解析这个 JSONObject query yahoo count 1 results rate Name USD INR id USDINR Time 12 19pm Date 10 31 2015 Bid 65 405 Ask
  • 如何使用双重调度来分析图形基元的交集?

    我正在分析图形基元 矩形 直线 圆形等 的交互并计算重叠 相对方向 合并等 这被引用为双重调度的一个主要示例 例如维基百科 http en wikipedia org wiki Double dispatch 自适应碰撞算法通常要求 不同的
  • 如何在 IntelliJ IDEA 中运行 akka actor

    来自 Akka 网站文档 然后 这个主要方法将创建所需的基础设施 运行演员 启动给定的主要演员并安排 一旦主要参与者终止 整个应用程序就会关闭 因此 您将能够使用类似于以下的命令运行上面的代码 下列的 java classpath akka
  • Android 认为我没有关闭数据库!为什么?

    我有一个 SQLiteDatabase 数据成员 我在 onCreate 中初始化它 并在 onPause onStop 和 onDestroy 中调用 close 它在 onResume 中重新初始化 它似乎运行得很好 但当我查看调试器时
  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • 如何自定义舍入形式

    我的问题可能看起来很简单 但仍然无法得到有效的东西 我需要自定义 Math round 舍入格式或其他格式以使其工作如下 如果数字是 1 6 他应该四舍五入到 1 如果大于或等于 1 7 他应该四舍五入到 2 0 对于所有其他带有 6 的小
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • java实现excel价格、收益率函数[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Android计算两个日期之间的天数

    我编写了以下代码来查找两个日期之间的天数 startDateValue new Date startDate endDateValue new Date endDate long diff endDateValue getTime star
  • 确定 JavaFX 中是否消耗了事件

    我正在尝试使用 JavaFX 中的事件处理来做一些非滑雪道的事情 我需要能够确定手动触发事件后是否已消耗该事件 在以下示例中 正确接收了合成鼠标事件 但调用 Consumer 不会更新该事件 我对此进行了调试 发现 JavaFX 实际上创建

随机推荐

  • 如何匹配NLTK CFG中的整数?

    如果我想定义一种语法 其中一个标记将匹配一个整数 我如何使用 nltk 的字符串 CFG 来实现它 例如 S gt SK SO FK SK gt SELECT SO gt d FK gt FROM 创建一个数字短语 如下所示 import
  • 初学者Python“无”问题

    我刚刚开始使用 python 自从我开始了一个新的计算器项目以来 pyCharm 在所有内容之后都没有吐出任何内容 我不确定是什么导致了这个错误 如果我能在这里得到一些帮助 我将不胜感激 这只是我展示的主要功能 这是代码 def main
  • 为什么 IEEE754 标准中除以零会产生无限值?

    我只是好奇 为什么在IEEE 754任何非零浮点数除以零都会得到无限值 从数学角度来看这是无稽之谈 所以我认为此操作的正确结果是 NaN 如果 x 是实数 则当 x 0 时 函数 f x 1 x 没有定义 例如 函数 sqrt 未定义为任何
  • 如何从 Jenkins 的提交消息中获取 JIRA 问题号

    我使用 Gitlab 进行源代码管理 使用 jenkins 进行 CI 作业 使用 JIRA 进行问题跟踪 一旦我在 gitlab 中提交了一个问题号 例如 Project 123 编辑的演示文件 我就有一个触发构建的 jenkins 钩子
  • 如何用教义随机选择

    这是我在数据库中查询某些单词的方法 query qb gt select w gt from DbEntities Entity Word w gt where w indictionary 0 AND w frequency gt 3 g
  • url 作为参数的 Mod-安全例外规则 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我是 mod 安全性的新手 并且能够将其安装在我的服务器上 然而 安装后托管的网站就崩溃了 跟踪问题后 我发现它不允许我在 php 代码中将 url 作为参数传递 例如 xyz ph
  • OpenCV 鼠标回调函数的返回值

    在 OpenCV 中 我想将像 Point x y 这样的点位置返回到我在鼠标回调函数中单击图像的 main 函数 除了设置全局变量之外还有什么办法吗 我不想将所有代码都写在 on mouse 函数中 Thanks 为了在那里扩展萨菲尔的想
  • Kotlin 变量名前的 Kotlin 星号运算符或 Kotlin 中的 Spread 运算符

    我想知道 Kotlin 中变量名之前的星号到底做什么 我看到了这个 args in a Spring Boot Kotlin 示例 SpringBootApplication open class Application Bean open
  • 更改周视图中日标题的格式

    如何更改 Fullcalendar gt weekview 中日期的格式 现在它说 Sun 7 24 Mon 7 25 Tue 7 26 Wed 7 27 Thu 7 28 Fri 7 29 Sat 7 30 我想切换月份和日期 所以它说
  • Jquery 检查 ajax post 是否成功

    如何定义 ajax post 的成功和失败函数 文档在这里 http docs jquery com Ajax jQuery ajax 但是 总而言之 ajax 调用需要很多选项 你正在寻找的是错误和成功 你可以这样称呼它 ajax url
  • 在Android应用程序中计算谷歌地图中多边形覆盖的面积

    我有一系列Location GeoPoint在我的 Android 应用程序中形成多边形的对象 我想知道有没有办法计算它所覆盖的面积 到目前为止 我正在考虑建立一个网络服务 当发布坐标列表时 使用 JS Google Maps API v3
  • Java ListChangeListener WasUpdated() 不起作用

    当 observableList 中名为 EventShowable 的对象被修改时 我想触发一些代码 这是我的代码 mainApp getCalendars get i getListEvents addListener new List
  • 为docker生成.env.exmaple文件

    我想生成一个 env和一个 env example文件并在 docker 构建期间将其推送到 docker 镜像Dockerfile 问题是 env example文件未复制到 docker 映像 我认为它适用于普通环境 因为我复制了 en
  • Oracle中使用正则表达式按分隔符分割字符串

    我需要在 Oracle 中编写脚本 在查询中按 字符拆分字符串 BP 593 00294 和 NC 12345 以便在单独的列中包含值 我在想这样的事情 select regexp substr mystr as col1 regexp s
  • 为什么在 .NET MAUI 中删除项目后列表视图显示不正确?

    包含所有注释的第一个屏幕 当我删除第一个笔记后 我最近开始使用 NET MAUI 进行编程 C 列表中的元素已正确删除 但是 删除后 剩余元素仅部分显示 这意味着只有例如显示第 4 个元素 对于其他元素 仅显示一个空栏 到目前为止我的代码
  • 正则表达式星号用法

    根据MDN x Matches the preceding item x 0 or more times 本质上 前面的字符应该是完全可选的 无论字符串存在与否 都会进行匹配 那么为什么会这样呢 1 var text foobar var
  • JDBC ResultSet 获取带有表别名的列

    想象一下我有一个像这样的查询 SELECT from table1 a table2 b where WHATEVER 也许两个表具有相同的列名 所以我认为通过访问数据会很好 resultSet getString a columnName
  • 改变角度后继续前进。 pygame

    我一直在致力于这个关于坦克的项目 基于游戏 Tank Trouble 我想知道在改变精灵的角度后我如何才能前进 另外如果你知道我如何让我的子弹从墙上弹跳的话 我将非常感谢所提供的任何帮助 谢谢你 这是我的坦克和子弹 这是游戏的代码 impo
  • 发送邮件而不阻止“执行”

    我在 Zend Framework 应用程序中使用 Zend Mail 来发送包含基于 Web 的联系表单内容的电子邮件 邮件本身工作正常 我使用 Google Apps 帐户 但处理时间可能相当长 从几秒钟到近一分钟不等 我的控制器操作通
  • System.out.print() 是如何工作的?

    我使用Java已经很长时间了 我想知道这个函数是如何实现的System out print works 这是我的疑问 作为一个函数 它在某处有一个声明io包裹 但是 Java 开发人员是如何做到这一点的呢 因为这个函数可以接受任意数量的参数