String类创建对象的方法可以分为以下三种

1.String a = "123";

2.String b = new String("123");

3.String c = "12" + "3";

1程序执行时,会先去jvm的常量池(在方法区中)中寻找有没有“123” 的String 对象,如果已经存在,则无须新建对象,直接把常量池中的对象地址返回给栈中的引用 a (此时没有建立对象)

如果没有存在,则在常量池中新建一个“123”的String对象。然后将其地址返回给栈中的引用 a(此时建立了一个对象)。

2.程序执行时,首先去jvm的常量池中寻找有没有“123”的String对象,如果有,则在堆中新建一个String类型的对象“123”,然后将其地址返回给栈中的引用b。(此时只新建了一个对象)。

如果没有,则先在常量池中新建一个“123”的String对象。然后再去堆中新建一个值为“123”的对象,并将堆中的对象地址返回给栈中的引用b。(此时建立了两个对象)

那在这里就有一个有趣的问题,那就是常量池中的对象和堆中的对象到底是不是同一个?可以通过比较  a == b 的值可得出结论。楼主这边得到false。可知他们并不是一个对象。

3.第三种构造方式比较复杂。网上也是众说纷纭。楼主在这里分为两种方式

3.1第一种方式是: String a = "123"; String b = "1" + "2" + "3";如果是这样,由于全是b是由常量拼接起来的。那么,在编译期间就能确定值,编译器就会在编译期间就帮你进行拼接。那么,编译过后就成为:String b = "123";之后的判断和1一样。且 a == b = true

3.2 String a = "123"; String b = "1"; String c = b + "2" + " 3";

由于c中有引用的拼接,而在编译过程中是无法知道引用的具体值,那么编译器就不会默认帮你进行拼接。常量池中就要新建一个对象。这时, a == c =false;

转载于:https://www.cnblogs.com/exceptionblog/p/7849838.html

java的String构造对象的几种方法以及内存运行过程相关推荐

  1. java 匿名list,java创造匿名对象的两种方法

    在java中有时候需要一些匿名对象的使用.可能有些小伙伴拿还不会创造,其实我们在学习一些方法时都或多或少的接触过.本篇所要讲到的创造匿名对象总结了两种方法,分别是静态工具方法和Lambda表达式,我们 ...

  2. java json转抽象对象_做一次面向对象的体操:将 JSON 字符串转换为嵌套对象的一种方法...

    原标题:做一次面向对象的体操:将 JSON 字符串转换为嵌套对象的一种方法 来源:琴水玉 , www.cnblogs.com/lovesqcc/p/9478678.html 程序员共读整理发布,转载请 ...

  3. Spring学习总结(28)——Spring获取request对象的几种方法及线程安全性总结

    分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!点击浏览教程 前言 在使用Spring MVC开发Web系统时,经常需要在处理请求时使用reque ...

  4. java中从键盘输入的三种方法以及Console输入

    java中从键盘输入的三种方法: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStre ...

  5. 在Action类中获得HttpServletResponse对象的四种方法

    Struts2:在Action类中获得HttpServletResponse对象的四种方法 在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和req ...

  6. java 1%10_Java获取随机数的3种方法

    方法1 (数据类型)(最小值+Math.random()*(最大值-最小值+1)) 例: (int)(1+Math.random()*(10-1+1)) 从1到10的int型随数 方法2 获得随机数 ...

  7. Java中遍历Set集合的三种方法

    Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...

  8. Java创建并执行线程的四种方法

    Java创建并执行线程的四种方法 java里面创建线程有四种方式: 无返回: 实现Runnable接口,重写run(); 继承Thread类,重写run(); 有返回: 实现Callable接口,重写 ...

  9. Java中遍历Set集合的三种方法(实例代码)

    哈喽,欢迎来到小朱课堂,下面开始你的学习吧! Java中遍历Set集合的三种方法 废话不多说,直接上代码 1.迭代遍历: Set set = new HashSet(); Iterator it = ...

最新文章

  1. php 二维数组字段合并,PHP将二维数组某一个字段相同的数组合并起来的方法,二维数组数组_PHP教程...
  2. Python编程语言学习:在根目录的py文件内调用某叶目录文件内的包/库或者函数(常用在GUI编程)之详细攻略
  3. 「Python-StandardLib」第十六章:并发执行( Cocurrent Executing,线程、多线程队列、子进程)
  4. java伪代码生成器_JAVA单例模式的实现伪代码
  5. LINUX 下 配置MySQL数据库集群
  6. idea非开源安装指南_开发人员开源指南
  7. GIthub创建文件夹、跳转链接、Read.me添加图片和换行显示等操作
  8. windows下mysql备份
  9. 物联网毕业设计 超声波雷达可视化系统
  10. WindowsXP自带小工具(转)
  11. Big FAT32 Format Pro(U盘格式化工具)官方正式版V2.0 | u盘无法格式化怎么办 | 万能u盘修复工具下载 | 突破FAT文件系统4GB的限制
  12. 解读基于数加的大数据仓库解决方案
  13. 49.QComboBox
  14. iPhone屏幕分辨率开发尺寸
  15. linux常用命令小结
  16. 浅谈企业知识资产管理及建设思路
  17. c语言写长方形体积公式是什么,长方体的体积公式 长方体的体积公式是什么
  18. 杨歌:金融电路与 Web3 经济模型原理 (转载及导言)
  19. 台式计算机的配置清单表格,电脑配置清单表格,为你分别介绍不同价位的三种配置清单...
  20. 使用Excel校验VIN码(车架号)第九位

热门文章

  1. 让底部始终在浏览器底部
  2. 基于Jquery+Ajax+Json+高效分页
  3. hdu3395纯KM
  4. 学习笔记 --- 编码过程中常见的三种异步方式
  5. 死磕 java集合之ConcurrentSkipListMap源码分析——发现个bug
  6. rocketmq之producer解析
  7. Swift的控制转移语句-- fallthrough语句
  8. Hello World -- Java Web版(Java Web 入门教程)
  9. 5个强大的Java分布式缓存框架推荐
  10. 修改RHEL7/centos7网卡为eth0