在Java中用引号创建String对象和用构造函数的区别

Java 面试,创建了几个String 对象? 我让你问!让你问!让你问! 字面量,字符串常量池,堆,谁还问我打谁。 阅读详情

创建一个String对象一般有以下两种方式:

String str1 = "abcd";
String str2 = new String("abcd");

这两种方式有什么区别呢?我们可以通过下面两个小例子来说明.



Example 1:

String a = "abcd";
String b = "abcd";
System.out.println(a == b);  // True
System.out.println(a.equals(b)); // True
这里 a == b 为 true,是因为 a 和 b 都引用了方法区的同一个字符串字面值。在java中,当同一个字符串字面值出现多次时,在内存中只会保存该字符串的一份拷贝,即 a 指向的 "abcd" 跟 b 指向的 "abcd" 在内存中是同一个对象。这种方法叫做 "字符串驻留(string interning)"。


Example 2:

String c = new String("abcd");
String d = new String("abcd");
System.out.println(c == d);  // False
System.out.println(c.equals(d)); // True

我们知道,new运算符的作用是在堆内存中创建一个新的对象。因而这里两次 new 就会在堆中创建两个String对象,尽管它们的字面值是相同的,但其实是两个同不的对象,占两份空间。因此 c == d 自然会返回 false 了。图示如下:



此外,我们可以调用String的intern()方法来强制让JVM使用字符串驻留,例如下面的代码:

String c = new String("abcd").intern();
String d = new String("abcd").intern();
System.out.println(c == d);  // Now true
System.out.println(c.equals(d)); // True

intern()方法调用时,首先会在字符串常量池中检查有没有 "abcd".equals(常量池中的字符串)为true的对象,如果有,则把该对象返回,如果没有,则创建一个"abcd"对象放到常量池中。因此,在创建d 的时候,intern()就会把先前创建的 "abcd" 的引用直接返回了。
基础学习-String类认识 【文章用于学习】⚫ StringBuilder 是一个可变的字符串容器, 我们可以把它看成是一个工具⚫ 作用:提高字符串的操作效率StringBuilder和String的区别⚫ String :内容是不可变的⚫ StringBuilder:内容是可变的。 阅读详情

相关推荐

光电振荡器(OEO):从原理到应用,解锁高频微波信号新纪元

本文深入解析了光电振荡器(OEO)的核心原理与前沿应用。OEO通过巧妙的光-电-光转换机制,利用光学谐振腔产生高频、高纯度、低相位噪声的微波信号,有效突破了传统电子电路的频率瓶颈。文章详细拆解了其工作流程,并探讨了在雷达系统、高速光通信及精密测量等领域的硬核应用价值。

weixin_29231027的博客 364

字符串对象的区别对比

创建字符串对象的区别对比 通过构造方法创建 通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同 直接赋值方式创建 以""方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中维护 字符串常量池 当使用双引号创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在 不存在: 创建 存在: 不会创建,而是直接复用 字符串的比较 == 比较基本数据类型:比较的

weixin_50336269的博客 732

[CTFSHOW]JWT

文章目录前言JWT简介CTFSHOW Web345CTFSHOW Web346前置知识开始做题CTFSHOW Web347CTFSHOW Web348CTFSHOW Web349CTFSHOW Web350前置知识利用WP如何防御 前言 有些师傅向我咨询WP,索性就发了吧,其实早就写好了,只是懒,在github仓库里囤着 JWT简介 可以看看我的Github总结给自己看的,Y4tacker CTFSHOW Web345 首先打开题目,查看源码,接下来访问/admin被跳转回主页啥也没有发生 where is

Y4tacker的博客 6038

day08-API String-StringBuilder

昨日内容回顾 面向对象 面向对象 偷懒,有事找别人完成;我们只指挥; 面向过程 自己干活;强调的是每一个步骤; 类 概述 模板,图纸,描述事物; 格式 public class 类名{ } 组成部分 成员变量 成员方法 构造方法 对象 概述 具体的事物;(个体) 创建对象 类名 对象名 = new 类名(实参); 使用对象 私有的成员变量,只能通过调用setter方法或构造方法存值;通过getter方法取值; 对象名.setXxx(实参); 关系 一个类可以创建出很多对象,(类是

InLoadwetrust的博客 237

华三模拟器实战:IPSec VPN穿越NAT的完整配置与调试(附常见问题排查)

本文详细解析了华三模拟器中IPSec VPN穿越NAT的完整配置与调试方法,包括基础环境准备、分步配置、ACL协调策略及高级故障排查。通过实战案例和关键参数解析,帮助网络工程师解决IPSec与NAT协同工作的典型问题,提升企业网络安全性。

weixin_33724046的博客 460

hCaptcha Enterprise绕过方案对比:四种Capsolver任务类型怎么选?

本文深入评测了hCaptcha Enterprise的四种Capsolver任务类型(HCaptchaEnterpriseTask、HCaptchaEnterpriseTaskProxyLess、HCaptchaTurboTask和HCaptchaTurboTaskProxyLess),分析其技术架构、性能表现及适用场景。通过基准测试和成本模型比较,帮助技术团队选择最优解决方案,提升自动化流程的验证通过率与成本效益。

rrr55的博客 321

String常见构造方法和区别对比

1.常见的四种方法 2.构造方法和双引号创建对象的区别 注意:==号做比较 基本类型数据:比较的是具体的值 引用数据类型:比较地址值 以" "方式给出的字符串,只要字符串序列相同(顺序和大小写),无论在程序中出现几次,JVM都只会建立一个String对象,并在字符串常量池中维护 字符串常量池:当使用双引号创建字符串对象的时候,系统会检查字符串是否在字符串常量池存在,不存在就创建,存在就直接复用。 2.通过构造方法创建的字符串对象,在堆内存中存储 ...

FDXCG_X的博客 492

(五)深入理解蓝牙BLE之“Beacon包格式详解”

蓝牙Beacon格式详解 本文重点在结合Bluetooth官网spec和几个例子来使beacon帧格式更加容易被理解。 广播帧格式: 首先beacon是蓝牙BLE广播包的一种,蓝牙广播帧格式如下: PS:其实BLE数据帧除了报头字段和数据字段定义与广播帧不同之外,前导/接入地址/长度/校验格式均相同。 广播帧数据字段格式: 数据字段最长为37个字节:6个字节的广播设备地址 + 31个字节广播数据。 广播数据的格式如下:AD Structure1 +AD Structure2 + .....

1万+

Java 字符串创建双引号和构造器有什么区别?

在 Java 生态中,字符串是使用最频繁的对象之一。与看似等价,实则蕴含着 JVM 内存管理的精妙设计。场景特征双引号创建(推荐)构造器创建(谨慎使用)固定常量(如配置项)✅ 内存复用❌ 内存浪费动态生成字符串❌ 编译期限制✅ 运行时构建内存敏感场景(如嵌入式)✅ 常量池共享❌ 堆内存开销需要独立对象实例❌ 共享引用✅ 独立内存地址高性能计算(如算法)✅ 无构造开销❌ 方法调用开销终极建议:优先使用双引号创建字符串,利用常量池的天然优化。

小李同学的博客 812

Cloud Connector RFC 访问控制深度实践:为 SAP BTP ABAP environment 打通安全、可控的远程连接

本文是一份面向企业ABAP团队与平台工程团队的Cloud Connector RFC访问控制配置指南。文章详细介绍了虚拟主机/实例号、负载均衡、资源白名单等核心概念,并提供了从零开始的配置流程。主要内容包括:通过Cloud Connector建立安全隧道的价值(零暴露、最小权限)、两种连接类型(无负载均衡/带负载均衡)的配置方法、资源白名单设置技巧,以及两个典型应用场景(Custom Code Migration远程检查与BAPI调用)的实操案例。指南基于SAP官方文档,包含落地经验与避坑建议,可帮助团队快

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 143

Flutter:如何在Android中实现串口通信调试

本文介绍如何通过flutter_libserialport插件在Flutter中实现串口通信调试。

sg_knight的专栏 6096

Java中用引号创建String对象和用构造函数的区别

创建一个String对象一般有以下两种方式: [java] view plaincopyprint? String str1 = "abcd";   String str2 = new String("abcd");   这两种方式有什么区别呢?我们可以通过下面两个小例子来说明. Example

我只是一个简单的Coder,为了兴趣和理想奋斗在生活的道路上 596

BF8815A

了解ADBMS1818芯片的人会发现,这款BF8815B和1818有着很多相似的东西,当你了解其中一款AFE之后,另一款你的上手也会特别快,下面文章是我针对1818梳理的一些重要知识点,此篇文章主要讲解BF8815B的一些差异点。

m0_61973119的博客 561

Java单引号与双引号、equals和==的区别

        今天在比较两个String值的时候,以为是true的地方却是false,以为false的地方却是true。经过尝试测验,遂发现自己对Java基础部分的知识仍然有很大的欠缺。 1.单引号和双引号的区别:         单引号是char类型,双引号是String类型         char表示字符,定义时使用用单引号表示,只能存储一个字符。         String表示...

日技 9497

IMSL CNL 7.0.0 (x86-64)Crack

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

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java基础-String对象的创建和存储

虽然堆中的对象都指向的是“xyz”中的字符串常量池中的内存地址,但栈中的x和y都指向x和y在堆内存中的不同的堆内存地址。如果堆里面new的是一个User对象,User对象里有一个String类型的name属性,则User的name里存储的并不是具体的字符串,而是存储的是字符串在字符串常量池中的内存地址。方式二的内存图,s3在内存中存在的形式就是,栈中的s3的内存地址指向堆中的String对象,堆中的String对象中的内存地址又指向方法区中“xy”的内存地址。且“==”判断的是内存地址。

flytalei的博客 3966

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java中String s = new String("abc")创建了几个对象

一、java中String s = new String("abc")创建了几个对象 答案是两个,现在我们具体的说一下: String s = new String("abc"); 首先我们要明白两个概念,引用变量和对象,对象一般通过new在堆中创建,s只是一个引用变量。 所有的字符串都是String对象,由于字符串文字的大量使用,java中为了节省时间,在编译阶段,会把字符串文字放在文字池中...

luzhensmart的专栏 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【java】String创建对象的两种方式

推荐使用,性能高,适合内容固定的字符串。

m0_46692380的博客 857

JAVA中char和string的区别

1.char表示字符,定义时用单引号,只能存储一个字符,如char c=’x’; 而String表示字符串,定义时用双引号,可以存储一个或多个字符,如String name=”tom”; 2.char是基本数据类型,而String 是一个类,具有面向对象的特征,可以调用方法,如name.length()获取字符串的长度。 ———————————————— 版权声明:本文为优快云博主「鱼米粒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://b

gb4215287的博客 8464

java 引号_java中单引号和双引号有什么区别

展开全部区别1:java中的单引号表示字符,java中的双引62616964757a686964616fe78988e69d8331333366306464号是字符串。区别2:单引号引的数据一般是char类型的;双引号引的数据 是String类型的。区别3:java中单引号里面只能放一个字母或数字或符号;java中的双引号里面是0到多个字符构成。所以字符可以直接转换成字符串。字符串需要使用char...

weixin_30433715的博客 6736

Java中String对象创建

字符串驻留 常量折叠 String a="abc"与String b=new String("abc")一样吗,难道也是语法糖??? String a="abc"要创建几个对象?? String a="abc";String b="abc";那么a==b吗?? String a="hello"+"world",创建几个对象?String b="hellowo

wobushixiaobailian的博客 1096

String str=new String(“abc“);到底创建了几个String对象?

String str=new String("abc")创建了2个String对象

踏浪逐波 5827

Java中单引号和双引号输出的区别

做题的时候发现的 " " 输出内容为空格的字符串;’ ’ 输出空格字符对应的ACCII码 查了一下资料 区别1:java中的单引号表示字符,java中的双引号是字符串。 区别2:单引号引的数据一般是char类型的;双引号引的数据 是String类型的。 区别3:java中单引号里面只能放一个字母或数字或符号;java中的双引号里面是0到多个字符构成。所以字符可以直接转换成字符串。字符串需要使用charAt(n) 来获取第几个字符。 char定义时用单引号,只能有一个字母,数字。char c=‘c’;而S

Bojun Jiang的博客 4391

String a=new String("abc")创建了几个对象

String str=new String("abc"); 紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢? 相信大家对这道题并不陌生,答案也是众所周知的,2个。 接下来我们就从这道题展开,一起回顾一下与创建String对象相关的一些JAVA知识。 我们可以把上面这行代码分成String str、=、"abc"和new String()四部分来看待...

qq_42221826的博客 2593

java string对象创建对象_Java String 创建了几个对象

我们首先来看一段代码:Java代码String str=new String("abc");紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?相信大家对这道题并不陌生,答案也是众所周知的,2个。接下来我们就从这道题展开,一起回顾一下与创建String对象相关的一些JAVA知识。我们可以把上面这行代码分成String str、=、"abc"和new String()...

weixin_33334142的博客 378

JAVA中对象的创建以及String的对象个数问题

三种情况 FighterPlane fp= new FighterPlane(); FighterPlane fp; fp= new FighterPlane(); String A=”abc”; 对于第一种情况【FighterPlane fp= new FighterPlane();】 这句话都做了什么事情? 0,栈内存分配main中的fp空间。 1,因为new用到了FighterPlan

LeeBoom 1747
上一篇: 跳转(Forward)和页面重定向(Redirect)的区别
下一篇: 10个适合于高级Java开发人员的外国网站
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值