1 package test;
2
3 public class StringTest {
4
5 public static void main(String[] args) {
6
7 /**
8 * 创建过程:
9 * 1.检查StringPool(字符串池)里是否有"aaa"对象,这里没有,创建StringPool的字符串对象"aaa"
10 * 2.在jvm堆里创建字符串对象"aaa"
11 * 所以,这里创建了2个对象
12 */
13 String s = new String("aaa");
14
15 /**
16 * 创建过程:
17 * 1.检查StringPool(字符串池)里是否有"aaa"对象,因为上面已经创建过,所以这里不再创建
18 * 所以,这里并没有创建对象
19 */
20 String s2 = "aaa";
21
22 /**
23 * 创建过程:
24 * 1.检查StringPool(字符串池)里是否有"aaa"对象,因为上面已经创建过,所以这里不再创建
25 * 2.在jvm堆里创建字符串对象"aaa"
26 * 所以,这里创建了1个对象
27 */
28 String s3 = new String("aaa");
29
30 /**
31 * intern方法的作用:返回调用对象的字符串池里的字符串对象的引用
32 */
33 String s4 = s.intern();
34
35 String hello = "hello";
36 String hel = "hel";
37 String lo = "lo";
38
39 /**
40 * 打印true
41 * 如果右边计算不涉及变量计算,全部都是常量,不会产生新的对象
42 * 所以返回的是字符串池里的对象引用
43 */
44 System.out.println(hello == "hel" + "lo");
45 /**
46 * 打印false
47 * 右边计算涉及变量计算,有对象操作,会产生一个新的对象
48 * 所以返回的是堆的对象引用
49 */
50 System.out.println(hello == "hel" + lo);
51 }
52
53 }

String类型 堆/字符串池的理解的更多相关文章

  1. delphi中如何将string类型的字符串数据转化成byte[]字节数组类型的数据

    var  S:String;  P:PChar;  B:array of Byte;begin  S:='Hello';  SetLength(B,Length(S)+1);  P:=PChar(S) ...

  2. C++ string 类型提取字符串

    在某些情况下需要对输入的字符串进行处理,提取其中的需要的信息. 比如在linux中输入"mkdir test",新建test文件夹,就需要提取其中的test字符. 提取的方法需要b ...

  3. 将String类型的字符串拼接成以逗号分隔的字符输出

    package test; import java.util.ArrayList; import java.util.List; public class Tesdssss { private sta ...

  4. Java字符串池(String Pool)深度解析

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 在工作中,String类是我们使用频率非常高的一种对象类型.JVM为了提升性能和减少内存开销,避免字符串的重复创建,其维护了一块特殊的内存 ...

  5. Java字符串池(String Pool)深度解析(转)

    出自  http://www.cnblogs.com/fangfuhai/p/5500065.html 在工作中,String类是我们使用频率非常高的一种对象类型.JVM为了提升性能和减少内存开销,避 ...

  6. C++的string类型和继承C语言风格的字符串的区别与注意事项

    1.尽可能地在C++程序中使用string,不要使用继承而来的C语言风格的字符串,会出现许多安全问题. 2.C语言的字符串风格,是以空字符结束的,在C++的头文件cstring中定义了C语言风格的字符 ...

  7. JAVA中int转String类型有三种方法

    String.valueOf(i) Integer.toString(i) i+"" i+""也就是一个int型的常量.+上个空的字符串,这里牵涉到了strin ...

  8. C++标准库string类型

    string类型支持长度可变的字符串,C++标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作.标准库string类型的目的就是满足对字符串的一般应用. 本文地址:http://www.cn ...

  9. 5.6.3 String类型

    String类型是字符串的对象包装类型,可以像下面这样使用String构造函数来创建. var stringObject = new String("hello world"); ...

随机推荐

  1. java并发编程实战《五》死锁

    一不小心就死锁了,怎么办? 在上一篇文章中,我们用 Account.class 作为互斥锁,来解决银行业务里面的转账问题,虽然这个方案不存在并发问题,但是所有账户的转账操作都是串行的,性能太差. 向现 ...

  2. Python中sort、sorted的cmp参数废弃之后使用cmp_to_key实现类似功能

    Python2.1以前的排序比较方法只提供一个cmp比较函数参数,没有__lt__等6个富比较方法, Python 2.1引入了富比较方法,Python3.4之后作废了cmp参数.相应地从Python ...

  3. pycharm 本地代码同步到github上

    第一步, pycharm中setting-> Version Control -> Github -> addacount 如果账号密码登录不成功,就用token登录,参考下面这个博 ...

  4. 使用Promise实现红绿灯交替重复亮

    红灯3秒亮一次,黄灯2秒亮一次,绿灯1秒亮一次:如何让三个灯不断交替重复亮灯?(用Promise实现) function red() { console.log('red'); } function ...

  5. 云服务器 ECS Linux 安装 VNC Server 实现图形化访问配置说明

    阿里云官方公共 Linux 系统镜像,基于性能及通用性等因素考虑,默认没有安装 VNC 服务组件.本文对常见操作系统下的 VNC Server 安装配置进行简要说明. 本文中仅讨论VNC的安装,关于图 ...

  6. docker 连接MySQL·集群

    1 指定端口 docker run -p 3307:3306 --name root -e MYSQL_ROOT_PASSWORD=root -d mysql # 6380 root password ...

  7. The Linux Scheduler: a Decade of Wasted Cores

    The Linux Scheduler: a Decade of Wasted Cores 这是一篇介绍Linux调度问题的文章,源自这篇文章.文章中涉及到的一些问题可能已经得到解决,但可以学习一下本 ...

  8. ES6、ES7、ES8、ES9、ES10新特性

    ES6新特性(2015) ES6的特性比较多,在 ES5 发布近 6 年(2009-11 至 2015-6)之后才将其标准化.两个发布版本之间时间跨度很大,所以ES6中的特性比较多. 在这里列举几个常 ...

  9. Navicat Primium连接数据库报ORA-28547错误

    这个问题主要是Navicat Primium与orecal中的oci.dll版本不一致造成的,无论是本地数据库或者网络数据库. 解决方法:在数据库orecal安装目录中搜索oci.dll文件,找到后将 ...

  10. 详解Java中的IO输入输出流!

    目录 本片要点 基本分类 发展史 文件字符流 输出的基本结构 流中的异常处理 异常处理新方式 读取的基本结构 运用输入与输出完成复制效果 文件字节流 缓冲流 字符缓冲流 装饰设计模式 转换流(适配器) ...