深入 -- 双引号字符串加号(+)拼接 创建了几个对象?

超声波清洗机拆解实录:从电路板到换能器,一文看懂内部构造(附高清图) 本文详细拆解了超声波清洗机的内部构造,从电路板设计到换能器工作原理,揭示了其核心技术。通过高清图片和详细分析,展示了功率放大电路、高频变压器及压电换能器等关键部件,为电子爱好者和维修技术人员提供了实用的故障诊断和元件二次利用指南。 阅读详情

双引号字符串加号(+)拼接 创建了几个对象?

结论先行:

双引号字符串 加号(+) 拼接,不论多少,只创建了一个对象。


昨天看到一个题目,挺有意思的。

大意是:

String a = "1"+"2"+"3"+"4";

创建了几个对象??


我当时第一反应是1个对象。

为什么呢?

因为 双引号字符串 直接写是在编译器就直接生成一个对象,class在编译的时候直接放入字符串常量池的。

这个知识点,可能时间有点久,自己也不太确定。

找两个同事问了问,给了我一个不一样的答案。

他们认为起码创建了 大于4个对象,底层是通过StringBilder 或 StringBuffer 进行的字符串拼接。

我也是一脸蒙蔽…自己分析看下呗..


分析:

我们先看下JDK官方 String API中的说法:

https://docs.oracle.com/javase/8/docs/api/java/lang/String.html



注意下,上面标红的字。

根据 API 中提供的样例,可以看到是 双引号字符串 和 对象相加。

这种情况,肯定是StirngBuilder 或 StringBuffer 进行的拼接。

对于这个, 我没有异议。

看一个案例

String a = "1";
String b = "2" + a;
System.out.println(b);

String c = "9" + "8" + "7" + "6";
System.out.println(c);

这里,"2" + a , 内部是调用了StringBuilder 或 StringBuffer 的append。

来看下,反汇编:


字符串"2" 和 对象a,进行 加号(+) 拼接的时候,调用的StringBuilder 的append,没问题....


既然 JDK API 中没有明确说明多个双引号字符串相加是什么情况,我们看下反汇编的结果:


可以看到直接就是 "1234"

再看下编译后的Class文件:

按照同事说的是字符串拼接的话,那应该在Class文件、反汇编中体现出来。

但是,并没有。

在生成的Class文件中,直接就是一个拼接好的字符串。

之后,JVM再去读取Class文件、解析Class文件,类加载,发现这个变量之后,直接放入字符串常量池。


如有问题,欢迎指正

点云配准SIFT+SI+RANSAC+ICP Spin Image(SI)是一种用于点云数据描述的特征描述子,广泛应用于三维点云配准、识别和重建等领域。它能够捕捉点云中的局部几何信息,具有旋转不变性和部分平移不变性等优点,是一种非常强大的特征描述子。Spin Image是一种强大的点云特征描述子,具有旋转不变性、局部几何信息捕捉等优点,适用于点云配准、目标识别和三维重建等多个领域。通过合理选择局部区域、建立参考框架和计算描述子,可以充分利用Spin Image描述点云的特征,从而实现各种三维场景分析和处理任务。 阅读详情

相关推荐

机房电脑的“还原”秘密:如何应对重启即清零的困境

机房电脑重启后自动还原是常见的现象,这主要依靠硬件还原卡或软件还原系统(如冰点还原)实现。这类技术会定期将系统盘恢复初始状态,但通常不保护非系统盘。要高效使用公共电脑,建议:1)将个人文件存储在D/E盘;2)使用绿色便携软件;3)必要时可尝试通过热键临时关闭还原功能;4)养成云端备份习惯。掌握这些技巧既能遵守机房规定,又能保证学习资料安全,培养良好的数字资产管理能力。

一位主要以学校学生信息技术,社会工作生活讲解科普拓展的博主 1457

java字符串相加在jvm中new多少个对象

String s1 = "aaa"; String s2 = "bbb" + "ccc"; String s3 = s1 + "bbb"; String s4 = new String("aaa"); 分析此段代码在java虚拟机中产生了多少个对象 一般回答可能是4个:aaa bbbccc aaabbb new的那个; 这个回答少了两个:StringBuilder toString的对象 使用javap -v xxx.Class 或者javap -cxxx.Class反...

weixin_39585051的博客 769

别再被骚扰了!手把手教你彻底卸载阿里云盾(安骑士)并封禁其IP段

本文详细指导如何彻底卸载阿里云盾(安骑士)并封禁其IP段,帮助用户夺回服务器控制权。从识别监控组件到执行官方卸载脚本,再到手动清理残留文件和配置iptables规则,确保完全阻断云盾通信。适用于追求极致性能或需要完全自主控制的环境。

weixin_42525551的博客 454

Java之String系列--创建对象的个数及其原理

String的原理是面试中经常问到的,其中很常见的问题就是:某某语句会创建多少个对象。本文就介绍这个知识点。

IT利刃出鞘的博客 1万+

Skiplist,B,B+tree,LSM tree

SkipList 理解(如何实现): 即使是有序的链表,查找的时间复杂度也是O(n),但链表不能随机访问所以不适用于二分查找,使得查找的时间复杂度为O(logn)。 于是将有序链表和二分查找结合得到了SkipList,类似于二叉搜索树,这是一种以空间换时间的算法,通过在每个节点中增加向前的指针,从而提升查找效率(如下图所示)。 一开始如a所示,是一个有序的链表,时间复杂度O(n)。随后建立了e所示的SkipList,从最顶层往下查找,可以跳过许多元素,减少查找次数。 ​

weixin_45875458的博客 947

英飞凌AURIX™ TC3xx系列MCU的ISO 26262安全机制实战:从安全手册到代码集成的避坑指南

本文深入探讨英飞凌AURIX™ TC3xx系列MCU的ISO 26262安全机制实战应用,重点解析锁步核配置、ECC策略优化及SafeTlib库集成中的关键问题。通过代码示例和配置建议,帮助开发者实现ASIL D级别安全性,规避常见陷阱,提升汽车电子系统的功能安全合规性。

weixin_42558093的博客 405

频繁的new同一个类型对象_别再问我 new 字符串创建了几个对象了!我来证明给你看!...

我想所有 Java 程序员都曾被这个 new String 的问题困扰过,这是一道高频的 Java 面试题,但可惜的是网上众说纷纭,竟然找不到标准的答案。有人说创建了 1 个对象,也有人说创建了 2 个对象,还有人说可能创建了 1 个或 2 个对象,但谁都没有拿出干掉对方的证据,这就让我们这帮吃瓜群众们陷入了两难之中,不知道到底该信谁的。但是今天,老王就斗胆和大家聊聊这个话题,顺便再拿出点证据。以...

weixin_39946460的博客 744

MATLAB基础应用精讲-【数模应用】信用评分模型(附R语言和python代码实现)

信用评分模型是近年来兴起的一种为了保障银行和其他金融部门的金融安全而设立的一种关于人身金融权限的划定模型。该模型指根据客户的信用历史资料,利用一定的信用评分模型,得到不同等级的信用分数,根据客户的信用分数,来决定客户所可以持有的金额权限,从而保证还款等业务的安全性。而随着在现代社会和公司中,贷款,信用卡的作用日渐突出,信用评分模型的发展前景不可估量。信贷风险是指借款人因偿还贷款或履行合同承诺而破产而产生损失的可能性。传统上,它与贷款人无法偿还所欠利息和本金、影响现金流和增加装配成本所产生的风险有关。

qq_36130719的博客 364

Java基础:String c=“a“+new String(“b“);会产生多少个对象?

Java的字符串拼接原理你真的懂吗?此篇文章中我们将讲述了Java字符串拼接的原理,并且通过反编译字节码文件进行探讨和验证。希望您在此文章中有所收获。

云丶言的博客 3549

深入解析:使用Python进行T矩阵散射计算的完整指南

在物理学和工程学中,散射是一个至关重要的概念。当波(无论是光波、声波还是其他类型的波)遇到一个障碍物时,它会在多个方向上散开。为了理解和预测这种行为,我们需要进行数学建模和计算。其中,T矩阵方法是一种非常有效的工具。在开始计算之前,我们需要定义一些基础函数。"""计算T矩阵的一个元素。参数:- wave_vector: 波矢- scatterer_position: 散射体的位置- scatterer_properties: 散射体的性质(如大小、形状等)返回:- T矩阵的一个元素。

qq_38334677的博客 1054

glibc: GLIBC_2.28‘ not found

这个时候,应该怎么解决,因为当前运行的机器是低版本,而程序是高版本,解决方法,或者是将程序降级,或者将当前系统升级。在一个glibc的接口版本是GLIBC_2.25的lab上,运行不了在2.28上编译的程序。看哪一个方便,但是不能通过 临时复制libc.so 文件来解决,因为会遇到下面的错误。所以如果是简单解决就是按照低版本的应用程序,来适配当前系统的glibc版本。比如下面的程序运行提示。

mzhan017的博客 2406

String详解,创建多少对象问题

String详解,创建多少对象问题。

jpkopkop的博客 3013

Electron vue3 - 使用SerialPort与串口交互教程,计算机串行端口(COM口、USB转串口等)进行通信连接读取或写入Arduino、单片机、PLC、扫码枪、打印机、老式调制解调器!

实战Electron使用SerialPort与串口交互详细全过程,Electron-vue3与串口交互示例,Electron vue使用serialport实现串口交互通讯,Electron-vue使用serialport连接本地串口,electron-vue 台称串口对接 SerialPort,electron串口调试工具,electron+vue+serialport实现串口通信,串口通信serialport使用和调试,electron-vue使用serialport串口通信及踩过的坑(已解决!)ele

🏆 前端领域优质创作者 4641

字符串拼接的加号问题

字符串拼接的加号问题 题目1: <p id="text">this is a test!这是一个测试</p> <div id="button"></div> <script> function clickFn(str){ var newStr=str.split('').reverse().join(''); ...

wenxiukeke的博客 2418

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

字符串类型及拼接详解

在编程中,字符串是一种非常常见的数据类型。它用于表示文本信息,可以包含字母、数字、符号等。本文将详细介绍字符串类型以及字符串拼接的方法,并通过代码示例展示其逻辑

gkx325325的博客 733

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【Python】新手入门(4):单引号、双引号与三引号的差异与应用

🌵Python字符串探索之旅🌵 🤔 Python中的单引号、双引号与三引号,你真的会用吗?🤔 本文将带你深入探索这三种引号在Python中的差异与应用。从单双引号的本质无区别,到三引号的多行与文档字符串用途,再到字符串的巧妙拼接技巧,一文让你全面掌握!🌟快来加入这场字符串的探索之旅吧!🚀 掌握Python中的引号魔法,轻松应对字符串处理挑战!#Python引号魔法# #字符串处理# #Python入门# 🤝

创作高质量博文,分享知识,共同进步! 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【Ruby开发者必备技能】:7种高性能字符串拼接方法全解析

掌握高效Ruby字符串处理技巧,提升代码性能。本文详解7种高性能字符串拼接方法,涵盖+、<<、concat、sprintf、插值、join及Builder模式的适用场景与性能对比,助你写出更优雅的Ruby代码,值得收藏。

FastProceed的博客 940

C#字符串拼接你用的是哪种方式?

C#字符串拼接你用的是哪种方式?1、“+”或者“+=”的方式2、string.Format()的方式3、StringBuilder的方式4、$ 的方式5、@ 的方式 今天(2021-11-02)在查看代码复盘的时候,看到字符串拼接这一块,突然福如心至,回忆起用过的几种字符串拼接方式。 然后百度简单梳理一下,看一看你用过哪种,如有其他方式,可以在评论区聊聊用用。 1、“+”或者“+=”的方式 string str = "我是一" + "句话"; //或者 string str = "我是一"; str +=

熊泽-学习中的苦与乐 2340

如何用模板字符串拼接一个对象作为函数的参数_JavaScript包装对象之字符串

包装对象我们知道,基本类型值不是对象,因而从逻辑上讲它们不应该有方法。但是为了便于操作基本类型值,JavaScript提供了3个特殊的引用类型:Boolean、Number和String。说其特殊,是因为每当读取一个基本类型值的时候,后台就会创建一个对应的包装对象,从而让我们能够调用一些方法来操作这些数据。例子:console.log("love".slice(1)); //输出:ove对象与包装...

weixin_39541750的博客 1019

【面试】Java 之 String 系列 -- 创建对象的个数及其原理

在 Java 编程中,String类是一个非常常用且重要的类,同时它的原理也是面试中经常被问到的知识点。其中一个常见的问题就是:某条语句会创建多少个对象。本文将详细介绍这个知识点。

2202_75481735的博客 986

MATLAB 中双引号 ““ 和单引号 ‘‘ 的区别详解

在 MATLAB 中,双引号""和单引号''都可以用来表示字符串,但它们的作用和底层类型是不同的。理解它们之间的区别,对于正确使用字符串处理功能非常重要。本文将深入探讨 MATLAB 中""和''的区别,以及在实际编程中的应用场景。

2202_75569688的博客 4866

深入了解String类及字符串拼接问题

String类 1.String概述 String 类代表字符串。Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。用双引号表示。字符串是常量;它们的值在创建之后不能更改。 2.String源码分析 //被final修饰不可被继承 public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used

m0_54797663的博客 1702

卡码网学习系列-4.字符串拼接时的一些问题

当使用了Scanner类中的nextxxxx()方法(除了nextLine()方法以外的)之后,在其下使用了一个nextLine()方法。,当发生上面的情况的时候,标志着上一次输入完成的回车符会被紧接着的nextLine方法吸收完成其自身的一次输入。除了nextLine()方法以外的该类下的输入方法都会舍弃回车符。– 返回一个 Integer 对象。

謬熙的博客 1293

第九章《字符串》第1节:String类的几个基本常识

一串连续的字符被称为字符串。为了与程序中的变量名相区别,字符串的两端都会加上双引号,所以在程序中如果出现了“abc”,那么它就代表一个字符串而不是一个变量的名称。被双引号引起来的一串字符也被称为“字符串常量”,例如“abc”就是一个字符串常量。在实际开发过程中,绝大多数情况下程序员都会用String类的对象来表示字符串,本小节就重点介绍几个关于String类的基本常识。(一)每个字符串常量都是String类的对象在Java程序中每个字符串常量都是String类的对象。

穆哥学堂--Java学习园地 400

深入解析Java字符串创建机制:从常量池到对象创建原理

在Java编程中,字符串是最基础且使用最频繁的数据类型之一。其底层实现涉及JVM内存模型、字符串常量池和对象创建机制等核心原理。字符串常量池作为JVM内存管理的关键组件,通过复用相同字面量的字符串对象,有效节省内存并提升程序性能。理解字符串的创建过程,包括字面量赋值与new关键字实例化的区别,是掌握Java内存管理和性能优化的基础。在实际开发中,字符串拼接、intern方法的使用以及字符串比较等操作,都直接影响着应用的性能与稳定性。本文以经典面试题`String s = new String("abc")`

aodanchui1057的博客 358

python字符串的几种用法和相关例子(入门简单篇)

学习了字符串的创建、拼接和分割,从基本的引号定义到高级的技巧,对字符串有了基本的认识。无论是在数据分析、机器学习、Web开发还是其他领域,字符串的创建、拼接和分割都是我们处理文本数据的重要工具。以下是一些关于字符串的相关题目:1.创建一个字符串,描述一杯你最喜欢的奶茶,并打印出来。2.使用字符串拼接出一个有趣的故事,根据线索按顺序进行拼接:线索1:在魔法森林的深处线索2:有各种神奇的生物线索3:皮皮小精灵是向导线索4:庆祝活动是为了纪念魔法王国的和平与繁荣。3.分割水果名称。

2303_77056372的博客 1192
上一篇: IDEA -- 普通Maven项目 没法加载相对路径配置文件
下一篇: 深入 -- Class反射
Simba_cheng
博客等级 码龄11年 250粉丝 203原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值