浅谈String str = ““ 和 new String()的区别

关于String类的知识经常出现在面试题中,在此先记录自己的理解。

首先明白一个事,java存在一个常量池,可以用来存储字符串常量。

1 创建的字符串变量在内存中的区别

两者看似都是创建了一个字符串对象,但在内存中确是各有各的想法。

String str1= “abc”; 在编译期,JVM会去常量池来查找是否存在“abc”,如果不存在,就在常量池中开辟一个空间来存储“abc”;如果存在,就不用新开辟空间。然后在栈内存中开辟一个名字为str1的空间,来存储“abc”在常量池中的地址值。

String str2 = new String(“abc”) ;在编译阶段JVM先去常量池中查找是否存在“abc”,如果过不存在,则在常量池中开辟一个空间存储“abc”。在运行时期,通过String类的构造器在堆内存中new了一个空间,然后将String池中的“abc”复制一份存放到该堆空间中,在栈中开辟名字为str2的空间,存放堆中new出来的这个String对象的地址值。

也就是说,前者在初始化的时候可能创建了一个对象,也可能一个对象也没有创建;后者因为new关键字,至少在内存中创建了一个对象,也有可能是两个对象。

2 String类的特性

String类 是final修饰的,不可以被继承。

String类的底层是基于char数组的。

3 两个方面

1)性能效率

String类被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。例如:

String str = “hello";

str = str + "world“;

所以当上文str指向了一个String对象(内容为“hello”),然后对str进行“+”操作,str原来指向的对象并没有变,而是str又指向了另外一个对象(“hello world”),原来的对象还在内存中。

由此也可以看出,频繁的对String对象进行修改,会造成很大的内存开销。此时应该用StringBuffer或StringBuilder来代替String。

而new String()更加不适合,因为每一次创建对象都会调用构造器在堆中产生新的对象,性能低下且内存更加浪费。

2)安全性

对象都是只读的,所以多线程并发访问也不会有任何问题。

由于不可变,用来存储数据也是极为安全的。

更多关于String类的讨论,其实有很多大神已经有了很全面的总结了,在网上能找到很多对String类的研究,其中我找到了一篇写的很详细的文章,相信以后我能完全理解上面所写的。大家有需要的也可以来看看。

Java的string类常量池及不可变性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

乐高机器人教室布置图片大全_圣诞节手抄报内容简单图片漂亮

圣诞节手抄报:圣诞节手抄报内容简单图片漂亮-圣诞节手抄报。 简单好看的超多套圣诞节手抄报高清图片模板 小学圣诞节手抄报大全!简单漂亮全都有 一、动手办报,尝试实践:1、学生独立排版2、展示学生排好版的报纸,欣赏各类风格不同的…

计算机控制技术实际PID控制,计算机控制技术数字PID.doc

计算机控制技术数字PID计算机控制技术实验报告题目:数字PID仿真姓名:学号:班级:2014年05月18日一、仿真设计的目的3二、主要任务及仿真要求3三、整定方法4四、数字PID控制器4五、仿真框图及增量式算法的流程图6六、各个模型的输出…

String s1=new String(“abc“); 和String s1=“abc“区别

在讨论他们的区别时,我们要知道java中的内存,主要分为堆和栈。栈中一般存放的是java中的基本数据变量 比如 int,double,float 还存放了对象的引用变量 如 Person person new Person() 中的 (Per…

flash动画制作作品_flash施工动画制作应该展现哪些内容

伴随施工方案演示动画的不断应用,越来越多的人认识到其中的功效,施工动画通过电脑技术将建筑过程演示出来,能够对建筑工地和施工过程进行详细的了解,避免施工过程中的一些错误,提高施工的安全性和工程的质量。作为施工…

计算机硬件可以干嘛,鲁大师有什么用?鲁大师可以干嘛?

相信很多网友新买一台电脑都会下载安装鲁大师,借助鲁大师来对电脑进行硬件检测、电脑优化、驱动管理以及硬件跑分操作,然而这些功能也是鲁大师软件的特色,下面将详细介绍鲁大师有什么用?鲁大师到底能干吗?1、自动硬件检…

python爬虫记录时间_Python新手写爬虫全过程记录分析

目标网站:http://bohaishibei.com/post/category/main/(一个很有趣的网站,一段话配一个图,老有意思了~)网站形式如下:目标:把大的目标分为几个小的目标。因为第一次干这个,所以对自己能力很清楚…

JAVA之编译期和运行期区别

编译期:检查是否有语法错误,如果没有就将其翻译成字节码文件。即.class文件。 运行期:java虚拟机分配内存,解释执行字节码文件。 从以下代码开始说明,欢迎大家指正 可以思考下,第一行跟第二行在编译时期有…

中国地质大学计算机地理信息学院,英文主页 软件工程、计算机科学与技术、地理信息科学等相关专业学生 中国地质大学(武汉)教师个人主页系统...

Associate professorSupervisor of Masters CandidatesHonors and Titles :中国地质大学第六届三育人标兵;中国地质大学首届朱训青年教师教育奖励基金;2003、2005、2008、2014、2015、2018年度获中国地质大学信息工程学院考核院/校级优秀。Gender :MaleE…

Java 设计模式——组合模式

概述 有时我们可能会被要求处理一个层级结构明显的对象,比如上下级的公司员工、比如层级嵌套的文件夹,还有丰富多彩的美食菜单。可是,我们可能要屡试不爽地编写深度搜索代码、要小心翼翼地编写递归逻辑。现在你可以忘掉这些,学习…

python分析犯罪数据_使用 SparkSQL 分析纽约市犯罪数据

在实验《使用 SparkSQL 分析纽约市犯罪数据》时候创建 DataFrame 并注册成表,报错!sqlContext.createDataFrame(Crimes).registerTempTable("Crimes")17/11/10 07:55:17 ERROR Executor: Exception in task 0.0 in stage 0.0 (TID 0)org.apach…

计算机硬件四则运算实验,实验一四则运算(INTERNET).pdf

123456电工电子实验中心实验报告课程名称: 计算机硬件技术基础实验实验名称: 实验一 四则运算姓名: 学号:评定成绩: 审阅教师:实验时间:123456123456一、 实验目的要求1. 熟悉汇编语言的框架结构&#xff0…

关于海康官网接口文档中:取流URL有效时间为5分钟表述歧义的说明

在海康官方在线接口文档中(原文链接:https://open.hikvision.com/docs/63f761576c594a309708525e1eefdbdb),关于视频预览接口中:获取监控点预览取流URLv2 ,这个接口的接口说明第6条为保证数据的安全性&…

计算机原理课程设计 第二版pdf,计算机组成原理课程设计二.pdf

计算机组成原理设计文档目 录实验简介实验原理 ……………………………………………………………… 2设计原理 ……………………………………………………………… 3实验设备 ……………………………………………………………… 3设计人员 …………………………………………………

调用海康视频接口获取预览取流的URL

开始之前请参考海康官方SDK文档 鉴于前段时间刚接触视频这一块,整理了自己的一些经验,具体的你们还是参考文档来吧 附上文档地址 https://open.hikvision.com/docs/docId?productId5c67f1e2f05948198c909700&curNodeId16741aecc05944a6b0cd1341d68…

c if语句多个条件判断顺序_Java中的流程控制语句 (基础篇四)

流程控制就是对事物次序的布置和安排,在程序中就是对代码执行次序的安排和控制程序中的流程控制主要有三种:顺序流程、选择流程、循环流程。顺序流程:比如打印输出的代码按照指定的顺序结构依次排序,打印的结果按照代码的顺序执行打印&#x…

计算机绘图实训任务书,2012-2cad实训任务书与指导书.pdf

文档介绍:计算机绘图 AutoCAD实训任务书与指导书机械制图教研室编写河北工业职业技术学院2004 年 6 月计算机绘图 AutoCAD实训任务书适用专业:高职机电、模具、数控、机制等专业一、“计算机绘图实训周”的性质“计算机绘图实训周”是根据机械制图教学大纲要求安排的…

五种常见流媒体协议

五种常见流媒体协议 流媒体(streaming media)是指将一连串数据压缩后,经过网络分段发送,即时传输以供观看音视频的一种技术。 通过使用 streaming media 技术,用户无需将文件下载到本地即可播放。由于媒体是以连续的…

git checkout 会把改动带过去吗_原创 | 操作失误不要慌,这个命令给你的Git一次反悔的机会...

点击上方蓝字,关注并星标,和我一起学技术。今天我们来介绍git当中两个非常非常好用的工具,git show和reflog。这两个命令虽然不是必知必会,但是如果熟练使用可以极大地帮助我们查看代码仓库的问题,以及在我们操作失误的…

计算机指令执行与时序逻辑,时序逻辑系统

时序逻辑电路其任一时刻的输出不仅取决于该时刻的输入,而且还与过去各时刻的输入有关。常见的时序逻辑电路有触发器、计数器、寄存器等。时序逻辑电路在逻辑功能上的特点是任意时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态&#xff0…

三种主流流媒体协议比较

一、介绍 在流媒体协议中,常用的流媒体协议主要有 HTTP协议,RTSP协议和RTMP协议。 在国内视频网站多采用HTTPMP4或者HTTPFLV协议传输视频,而国外使用RTMP,RTSP等专门的流媒体格式。 二、协议介绍 1、HTTP协议: HTTP的视频协议…