Java 中的字符串连接和自动装箱

2024-03-09

当您将 String 与 int 等原语连接起来时,autobox价值第一。

ex.

String string = "Four" + 4;

它如何将值转换为字符串Java?


要查看 Java 编译器生成的内容,使用它总是有用的javap -c显示实际生成的字节码:

例如下面的 Java 代码:

String s1 = "Four" + 4;
int i = 4;
String s2 = "Four" + i;

将产生以下字节码:

   0:   ldc     #2; //String Four4
   2:   astore_1
   3:   iconst_4
   4:   istore_2
   5:   new     #3; //class java/lang/StringBuilder
   8:   dup
   9:   invokespecial   #4; //Method java/lang/StringBuilder."<init>":()V
   12:  ldc     #5; //String Four
   14:  invokevirtual   #6; //Method java/lang/StringBuilder.append:(Ljava/lang/
String;)Ljava/lang/StringBuilder;
   17:  iload_2
   18:  invokevirtual   #7; //Method java/lang/StringBuilder.append:(I)Ljava/lan
g/StringBuilder;
   21:  invokevirtual   #8; //Method java/lang/StringBuilder.toString:()Ljava/la
ng/String;
   24:  astore_3
   25:  return

由此我们可以看出:

  • 如果是"Four" + 4,Java 编译器(我使用的是 JDK 6)足够聪明,可以推断出这是一个常量,因此在运行时不需要计算工作,因为字符串是在编译时连接的
  • 如果是"Four" + i,等效代码是new StringBuilder().append("Four").append(i).toString()
  • 这里不涉及自动装箱,因为有一个StringBuilder.append(int) http://docs.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html#append%28int%29根据文档正在使用的方法String.valueOf(int) http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#valueOf%28int%29创建整数的字符串表示形式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中的字符串连接和自动装箱 的相关文章

随机推荐

  • 为多个应用程序创建安装程序

    嘿 我正在尝试从一台服务器计算机创建多个游戏的安装程序 然后由各个计算机执行 例如 BF 1942 WC3 BF2 DOW 但是 我需要能够选择要安装的应用程序 这是一个简单的复选框 我对 C 的了解有限 解决这个问题的最佳方法是什么 我看
  • Android NDK:如何在没有java的情况下重写NativeActivity中的onBackPressed?

    我的应用程序完全使用 C C 编写NativeActivity 它没有 Java 代码 基于 native activity NDK 示例 按 后退 按钮将其关闭 破坏活动 但我需要此按钮的其他行为 因为我有自己的 UI 和菜单 它们通过
  • PHP-按索引范围获取数组记录

    你好呀 是否有任何 PHP 本机函数可以根据索引的开始和结束返回数组中的记录范围 i e array 0 gt a 1 gt b 2 gt c 3 gt d 现在我只想返回索引 1 和 3 b c d 之间的记录 任何想法 你不能这样做吗
  • WPF Flowdocument paragraph.BringIntoView() 不适用于新文档

    我想加载大 rtf 文件并滚动到其中的特定段落 所以我做了这样的事情 private FlowDocument GenerateDocument string path var doc new FlowDocument using File
  • 如何在WPF中绘制可点击的矩形

    我是 WPF 应用程序的绝对初学者 需要一些帮助 我想做的就是从 A 点到 B 点画一个矩形 and能够检测何时单击矩形 因此 当单击它时 它会变成黄色 再次单击时 它会变成红色 有多种方法可以做到这一点 向矩形添加单击处理程序 并从后面的
  • 键入任何 不能符合 Hashable

    我正在使用 Swift 5 7 新功能 并尝试实现一些异构集 我已将代码简化为这个简单的游乐场 protocol Stuff Hashable var identifier String get struct StuffA Stuff le
  • Java字符串数组反转

    我试图反转 java 数组中的所有字符串 但似乎用第一个字符串覆盖了所有字符串 private static void palindrome String s int flag 0 String reverse for int i 0 i
  • 学习如何分析项目

    我刚刚偶然开始为我公司的一个客户 中小企业 分析一个项目 我是一名 Net 开发人员 5 年 在分析软件方面经验很少 来自学校的 UML 我们刚刚结束了与用户两周的交谈 并得到了一份不错的需求清单 显然 我们已经过滤掉了最重要的需求 并且必
  • 使用 fetchedResultsController 删除表视图中的行

    在 swype 删除期间 此方法最重要的几行 void tableView UITableView tableView commitEditingStyle UITableViewCellEditingStyle editingStyle
  • 如何在 ActionScript 3 中获取用户的屏幕分辨率?

    ActionScript 3 有没有办法检测用户的屏幕分辨率 这些会将数字返回到输出窗口 trace Capabilities screenResolutionX trace Capabilities screenResolutionY
  • Netty:如何处理从 ChunkedFile 接收到的块

    我是 netty 新手 我正在尝试将分块文件从服务器传输到客户端 发送块工作得很好 问题在于如何处理接收到的块并将它们写入文件 我尝试的两种方法都会给我带来直接缓冲区错误 任何帮助将不胜感激 Thanks Override protecte
  • 使用 LINQ to Entities 将多条记录插入表的正确方法

    正如我们许多人所做的那样 我设置了一个简单的循环来从数据库添加多个记录 一个典型的例子是这样的 方法一 A list of product prices List
  • 从图像中删除周围的空白

    我有一组从客户那里收到的产品图片 每张产品图片都是某物的照片 并且是在白色背景下拍摄的 我想裁剪图像的所有周围部分 但只保留中间的产品 这可能吗 举个例子 http www 5dnet de media catalog product d
  • Eclipse 如何针对第三方框架进行代码补全?

    How does the Eclipse editor work to enable code completion For example within the XML editor for Hibernate property file
  • 非静态内部类对象不再被引用后会被垃圾回收吗?

    我有一个类似于以下的 spring bean public class MyServiceImpl private MyDAO myDAO public class MyInnerClass implements SomeInterface
  • 如何在 JavaFX 应用程序中显示 HTML

    我正在开发一个 FontViewer 应用程序 它根据所选的字体样式更改文本的字体 这是我的应用程序的控制器类 public class FXMLDocumentController implements Initializable FXM
  • 使用动作脚本获取IP地址?

    是否可以通过Flash swf Action Script 3获取客户端IP地址 然后将其传递到php文件以将其存储在数据库中 无需在 Flash 中执行此操作 只需在服务器上的 php ip REMOTE ADDR 中执行此操作即可
  • 为什么调试器内存窗口在 VS 2015 中不可用?

    Visual Studio 调试器具有这些内存窗口 用于检查原始内存 在 Visual Studio 2015 中 这些仍然存在 因为存在关联的命令 好吧 文档也是这么说的 然而他们并没有出现 在菜单中 调试 gt Windows gt 没
  • 为什么 django 会忽略来自线路的 HTTP_X_FORWARDED_PROTO 但在测试中却不会?

    如果 HTTP X FORWARDED PROTO 通过网络传输 为什么 django 会忽略它 我在 settings xml 中添加了以下配置 make sure we know when we are secure when we a
  • Java 中的字符串连接和自动装箱

    当您将 String 与 int 等原语连接起来时 autobox价值第一 ex String string Four 4 它如何将值转换为字符串Java 要查看 Java 编译器生成的内容 使用它总是有用的javap c显示实际生成的字节