JAVA中string的赋值_Java中关于String赋值的两种形式
说明:
String在java中是使用频率很高的一个类,之前使用的时候并没有过多的在意,只知道有两种赋值方式,一种是采用字面值方式(String string1 = “string”;),一种是使用new关键字(String string2 = new String(“string”);)。如果使用string1==string2比较的话,你会发现结果为false,说明两者的地址并不一致,虽然我知道两个String比较的话为了避免出错要用string1.equals(string2),但是不知道为什么这么约定,直到今天才渐渐明白……
正是由于String是比较常用的类,不管是用户输入的字符串还是一些文本信息,都要使用String类。java为了提高效率,便于高效的管理这些String对象,设计了String池(String pool)用于存放String对象,下面我们来分析一下两种创建String对象的机制。
第一种方式:
String string1 = “string”;,这种采用字面值创建String对象的方法,首先检查 String Pool 中是否存在“string”这个对象:
1、如果存在,则不创建任何对象,直接将 String Pool 中的这个 string 对象的地址返回来,赋值给 string1 这个引用,这样 string1 就指向 String Pool 中的 “string” 这个对象;
2、如果 String Pool 中不存在 “string”这个对象,那么就先在 String Pool 中创建一个 “string” 对象,然后将 String Pool 中这个 “string” 对象的地址返回来。
第二种方式:
String string2 = new String(“string”);,众所周知new出来的对象是创建在堆内存中的,但是这里因为有 String Pool 的概念,所以略有不同,首先还是检查 String Pool 中是否存在“string”这个对象:
1、如果存在,则不在 String Pool 中再创建 “string”这个对象了,而是在堆内存(heap)中直接创建一个“string”对象,然后将堆中这个 “string”对象的地址返回来,赋值给 string2 引用,这时 string2 指向的是堆中的 “string”对象,注意并不是指向 String Pool;
2、如果 String Pool 不存在 “string”这个对象,则首先在 String Pool 中创建一个“string”对象(为了方便管理嘛),然后再在堆中创建一个“string”对象,返回堆中这个“string”对象的地址,赋值给 string2 这个引用,这便使得 string2 指向了堆中的对应地址。
总结:
使用字面赋值方式创建 String 对象,返回的地址是指向 String Pool 中的,而使用new关键字创建的 String 对象,返回的地址是指向堆内存的。
public class Test {
public static void main(String args[]) {
String string1 = "string";
String string2 = new String("string");
System.out.println(string1 == string2);
}
}
因此这里输出的肯定是false。
JAVA中string的赋值_Java中关于String赋值的两种形式相关推荐
- java校验码的设计_Java动态验证码单线设计的两种方法
1.java的动态验证码我这里将介绍两种方法: 一:根据java本身提供的一种验证码的写法,这种呢只限于大家了解就可以了,因为java自带的模式编写的在实际开发中是没有意义的,所以只供学习一下就可以了 ...
- java传参数的方法_java中方法的参数传递机制
无论是什么语言,要讨论参数传递方式,就得从内存模型说起,主要是我个人觉得从内存模型来说参数传递更为直观一些.闲言少叙,下面我们就通过内存模型的方式来讨论一下Java中的参数传递. 这里的内存模型涉及到 ...
- java 中 如何sum 乘法_JAVA中解决大数乘法和加法问题
前言 在日常的算法练习中难免会遇见涉及阶乘的计算的题目,总所周知阶乘的数据会变得非常大,此时int和long型都装不下只能借助于String来表示,所以这里特为大家提供两种解决方案:1.使用Java ...
- java语言的多态性及特点_Java中的方法的多态性有两种形式:( )和( )。_学小易找答案...
[填空题]已知函数 ,则微分 . [填空题]. [单选题]71.用转动小滑板法车圆锥时产生( )误差的原因是小滑板转动角度计算错误. [单选题] [填空题]Java中的方法的多态性有两种形式:( )和 ...
- php内li背景色,CSS_css中ul li的背景小图标属性设置的两种情况,这里我们分两种情况列出: ① - phpStudy...
css中ul li的背景小图标属性设置的两种情况 这里我们分两种情况列出: ①当标题前的图标是很长的一绺而不是单独的一个点或者类似图标时,在定义背景图background要定义在 里.因为很长,所以放 ...
- c语言中的普通字符包括什么,【判断题】C语言中的字符常量通常有两种形式:普通字符和转义字符。...
[判断题]C语言中的字符常量通常有两种形式:普通字符和转义字符. 更多相关问题 ---Can you speak French?---Yes, but only____.A.a littleB.lit ...
- windows系统中,在当前目录下打开cmd命令行的两种方法
windows系统中,在当前目录下打开cmd命令行的两种方法 1.在当前路径地址栏中直接输入'cmd',然后回车. 2.在当前路径下,按住'shift'键同时点击鼠标右键,点击"在此处打开P ...
- ASP.NET中对Exception的统一集中处理常见的有两种方式的一些问题总结
ASP.NET中对Exception的统一集中处理常见的有两种方式: 1.通过配置Web.config的customErrors节点,配置defaultRedirect属性来实现所有"未处理 ...
- java实参将数据传递给形参的两种形式
java实参将数据传递给形参的两种形式 /*** java实参将数据传递给形参的两种形式* 1,按值传递* 2,按引用传递* * 当参数是基本数据类型时,数据不占用堆内存,按值传递* 当参数是引用类型 ...
最新文章
- 选项选择Windows XP系统安装MySQL5.5.28图解
- 水晶报表printmode的ActiveX打印
- python 矩阵中的冒号 逗号
- python 时间模块备忘
- python ide如何运行_如何在Ubuntu上安装IDLE Python IDE
- NAPI模式--中断和轮询的折中以及一个负载均衡的问题
- 【学习·求职必备】入行深度学习之前,应该做好哪些准备
- 判断是否为ie8浏览器
- 数据结构(六)查找---多路查找树(2-3-4树)
- Win11系统如何设置任务栏新消息提醒
- 深入浅出Visual C++串口编程--深入浅出VC++串口编程之DOS的串口编程
- bzoj1967 [AHOI2005]穿越磁场 离散最短路
- 卢伟冰为Redmi K50电竞版预热:相机拍照效果越来越出色
- AI、大数据、中台、AIoT、Fintech等十余场火热专题应有尽有,年度盛会BDTC 2019邀您共赴!...
- Js与flash交互:在html页面中用js与MyReport插件交互
- 计算机网络防护,计算机网络防护方法与流程
- 欧派caxa设计软件_CAXA 2016 非常优秀的CAD电子图版设计软件
- oracle 如何防止锁表,oracle锁表该如何解决
- ubuntu系统,网页版音乐播放器无声音
- windows驱动签名
热门文章
- 面试题 : Intent、IntentFilter、PendingIntent的区别
- changePage() 页面跳转
- XML在线转化为JSON
- “没有找到iliertutil.dll,因此这个应用程序未能启动。”文件拷贝 PE 或者 dos...
- urlrewrite 保持 posturl
- Community Server系列之三:页面间关系2[介绍]
- C++中使用TCP传文件
- linux shell date 1,linux shell date命令的坑(date 1 month ago 的诡异现象)
- git:The authenticity of host 'github.com (13.250.177.223)' can't be established.
- matlab 矩阵数据生成.csv表格