关于String str="abc"与String str= new String("abc")区别

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

                       看到一个面试题说是String str1="abc"与String str2="abc"打印 str1==str2的结果,结果搞错了惊恐下面说明下这个问题,先看下代码

                     

                String str1 = "abc";
		String str2 = "abc";
		
		System.out.println(str1==str2);
		
		System.out.println("====================分割线=====================================");
		
		String str3 = new String("abc");
		String str4 = new String("abc");
		  
		System.out.println(str3==str4);

                       测试结果如下

                     



                    解释下原因,第一个true是因为,String是final的,他存储在方法区的常量区,看下图

                       

                      

                  显然“abc”在常量区只有一份,所以在多的引用,都是指向内存中同一个地址,所以结果是true


               但如果是new 一个String对象呢,结果就会有所不同,此时在堆区会有一个对象被创建,如下图


              


                         从图中可以看出使用new 创建字符串时,会在堆区(heap)创建一个对象,它们都会引用常量区的一个字符串,所以,str3和str4不同。

Doorbell机制在PCIMSI中断中的高效应用 本文深入解析了Doorbell机制在PCIe设备CPU间通信中的核心作用。作为一种高效的硬件通知机制,它通过内存映射I/O(MMIO)实现软件对硬件的轻量级触发,常MSI中断协同工作,构建高效的生产者-消费者模型。文章以AMD GPU的Ring Buffer命令提交为例,阐述了该机制如何显著降低CPU开销、提升系统吞吐量,并对比了其传统中断方式的性能优势。 阅读详情

相关推荐

手把手教你搭建幽冥传奇手游:从环境配置到常见Bug修复(附完整避坑指南)

本文详细指导如何从零搭建幽冥传奇手游,涵盖服务器选型、数据库部署、双区架构配置等关键步骤,并提供通天塔闪退、技能显示异常等常见Bug的修复方案。附完整避坑指南,帮助开发者高效解决90%的典型问题,确保游戏稳定运行。

weixin_29232121的博客 201

C++中的String的常用函数用法总结

一. string的构造函数的形式: string str:生成空字符串 string s(str):生成字符串为str的复制品 string s(str, strbegin,strlen):将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值 string s(cstr, char_len):以C_string类型cstr的前char_len个字...

qq_37941471的博客 46万+

人工智能顶会投稿指南:CCF-A类会议ACL、ICML、NeurIPS、ICLR的投稿周期影响力解析

本文详细解析了CCF-A类会议ACL、ICML、NeurIPS、ICLR的投稿周期影响力,涵盖各会议的投稿时间线、评审特点及录用率。ACL注重自然语言处理,ICML强调机器学习理论,NeurIPS覆盖神经信息处理,ICLR聚焦表征学习。文章还提供了实战投稿策略,帮助研究者提升投稿成功率。

weixin_29211309的博客 3069

String str

String str=new String(“abc”); 跟着这段代码之后,我们会想到一个问题,就是这行代码究竟创建了几个String对象呢?答案是2个。String str只是定义了一个名为strString类型的变量,因此它并没有创建对象;=是对变量str进行初始化,将某个对象的引用(或者叫句柄)赋值给它,显然也没有创建对象;现在只剩下了new String...

kongzheng1993的博客 1126

String类的学习笔记(上):介绍String类及其常用方法的使用

本文介绍了Java中用来描述操作字符串的String类,和其一些常用的基本操作方法,字符串的创建输出,字符串对象的比较,字符串查找,字符串的转化,字符串的替换,字符串拆分,字符串截取,和大小写转换,去除左右空格,子字符串包含,学会使用这些方法,能更方便的使用操作字符串~

记录并分享学习编程时的知识点... 4019

【C++】STL常用容器总结之十二:string

13、string类声明string类本不是STL的容器,但是它STL容器有着很多相似的操作,因此,把string放在这里一起进行介绍。 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下的需要。我们尽可以把它看成是C++的基本数据类型。 首先,为了在我

长相忆兮长相忆的专栏 2万+

String str=““new String()的区别

一、基础概念 1.1 常量池 用来存放一些常量,该常量是在编译期被确定,并被保存在已编译的.class文件中,其中包括了类,方法,接口等包含的数值常量,字符常量和字符串常量。 1.2 字符串常量池 在常量池中,有个专门用来存储字符串常量的,称之为字符串常量池。当我们需要使用字符串时,首先会在字符串常量池中查找是否存在该字符串,若存在则直接进行使用;若不存在,则会新建一个对应的字符串,并保存在该字符串常量池中。 1.3 在编译期间创建的常量和运行期间创建的常量保存的地址 对象的引用都是存

dreaming9420的博客 1694

String str="abc" String str = new String("abc")区别

1.java运行环境有一个字符串池,由String类维护,执行语句String str="abc"时:        1.首先查看字符串池中是否存在字符串"abc",如果存在则直接将“abc”赋给str,如果不存在则先在  字 符串池中新建一个字符串"abc",然后再将其赋给str.        2.执行语句String str = new String("abc");时。不管字符串池中是否

小雷的私人记事本 765

java面试题15_String str1=abcString str2=new String(“abc“)的区别

Java字符串创建方式主要有两种:String str1="abc"和String str2=new String("abc")。关键区别在于: 内存分配:字面量方式使用常量池,new创建堆对象 对象复用:相同字面量共享常量池对象,new每次创建独立对象 比较结果:==比较时,字面量引用相同返回true,new的对象返回false 内存效率:字面量方式更高效,避免重复创建 最佳实践是优先使用字面量赋值,字符串比较用equals()方法。intern()方法可强制从常量

qq_39275653的博客 599

java中String str="abc"String str1=new String("abc")区别

原文地址:http://781588100.blog.51cto.com/9429625/1558888

Alvin_CSDN_blog的博客 4728

Java中stringString区别_java中String str="abc"String str1=new String("abc")区别

1. 栈(stack)堆(heap)都是Java用来在Ram中存放数据的地方。C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器...

weixin_29587979的博客 576

2.String str1=abc String str2=new String(“abc“)一样吗?,区别是什么?

String s = new String(“abc”)会在堆中创建新的abc,不管之前是否存在。如果字符串常量池中不存在abc,则会在常量池中创建该字符串的引用。如果常量池中已经存在abc,则会重新创建一个abcString s =abc”,如果字符串常量池中不存在abc,会在字符串常量池中创建一个abc;如果已经存在,则s指向已经存在的abc,直接调用字符串常量池中的“abc”。

hyzlovest的博客 811

String str="abc" String str = new String("abc");详解

1.java运行环境有一个字符串池,由String类维护,执行语句String str="abc"时:                                                                                                                                        1.首先查看字符串池中是

renyuanchunby的专栏 1万+

String s =abcString s = new String(“abc“)的区别&new String(“abc“)创建了几个对象

String s = new String(“abc”)会在堆中创建新的abc,不管之前是否存在。如果字符串常量池中不存在abc,则会在常量池中创建该字符串的引用。如果常量池中已经存在abc,则不会重新创建,常量池中的字符串不会重复。String s =abc”,如果字符串常量池中不存在abc,会在字符串常量池中创建一个abc;如果已经存在,则s指向已经存在的abc。1.String s =abcString s = new String(“abc“)的区别。搬运自Javaguide。

Arbicoral的博客 264

String str = "abc"String str = new String("abc")区别

String str = new String("abc"); 创建对象的数量可能是一个也可能是两个,如果常量池中拥有abc这个字符串常量的话,就只会在堆中创建一个对象,如果常量池中没有abc字符串,则常量池和堆中都需要创建。 String str = "abc"; JVM会直接检查常量池中是否拥有“abc”字符串对象,如果没有就分配一个内存存放“abc”,如果有则直接将该字符串在...

sereverls的博客 617

String str1="ABC"; 和String str2 = new String("ABC"); 有什么区别

String str1="ABC" 可能创建一个对象或者不创建对象,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").如果已经存在,str1直接reference to 这个String池里的对象。 String str2 = new String("ABC") 至少创建一个对象,也可能两个。因为用到new

qq_33387859的博客 1341

Java 中 String str = new String(“abc”) & String str =abc区别

String

我是小彬彬 614

JAVA--String str=““new String()的区别

目录 常量池: 使用String直接赋值: 使用new String创建字符串: String拼接字符串: String.intern(): 总结: 常量池: 常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。 在常量池中存储字符串常量的内存空间,即字符串常量池,当需要使用字符串时,先去字符串池中查看该字符串是否已经存在,如果存在,则可以直接使用,如果...

codingToMaster的博客 552

String s=abc“和new String(“abc“)详细区别

从底层介绍String的两种创建方式差异所造成的效果

愿你我都能实现自己的梦想 2134

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

一、到底创建了几个对象 1、String str =abc”; 创建了几个对象?0个 或者 1个 2、String str = new String(“abc”);创建了几个对象? 1个或2个 二、首先了解几个基本的概念: 点击了解 JVM的内存管理 1、String是一个特殊的包装类数据。即可以用String str = new String(“abc”);的形式来创建,也可以用Stri...

单枪匹码 1万+

String str = new String("abc")到底创建几个String对象

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

fakergoing的博客 7711

String str = new String("abc")究竟创建了几个对象?

先给出答案:两个。(如果原来常量池中没有"abc")   String是一个特殊的包装类数据。即可以用String str = new String("abc");的形式来创建,也可以用String str = "abc";的形式来创建 String str = "abc"创建对象的过程   首先在常量池中查找是否存在内容为"abc"字符串对象 如果不存在则在常量池中创建"abc&qu

qq_36470686的博客 2万+
上一篇: 使用jfreeChart生成柱状图,折线图,饼图等
下一篇: 使用FusionChartsFree整合项目
K_122
博客等级 码龄11年 11粉丝 38原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值