博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中关于String对象的解析
阅读量:5061 次
发布时间:2019-06-12

本文共 822 字,大约阅读时间需要 2 分钟。

java中的字符串是我们经常使用的,对于其创建的字符串对象往往很让人疑惑,下面做几点关键性说明:

 

  1. 首先我们要明确String final类,即创建的对象为最终态,即不能被修改。所以说String是一个常量,一旦创建,其值是不能被改变的。然后java中有一个字符串缓冲池(String pool)。当使用“+”拼接时会产生一个新的String对象,而不是向原有的对象追加内容。

  2. 创建字符串的两种方法(本人自己的叫法):

      1)字面赋值的方式: 如 String s = "aa";这样也是创建了一个对象。

      2)常规对象创建方式: 如 String s = new String("aa");

  3.java中有一个字符串缓冲池(String pool),位于栈中

      1)当通过字面赋值的方式创建String对象 s 时,会检查字符串缓冲池中是否有"aa"对像存在,如果有,则不创建新的对象,而是将已经存在的"aa"的对象的引用指向s。如果没有,则创建一个新的内容为"aa"的对象,并将其引用指向s。

      2)当通过常规对象创建方式创建对象s时,首先也会检查String pool中是否有"aa"对象存在,如果有,这直接在堆中再创建一个内容为"aa"的对象,并将其引用指向s,即 String s = new String("aa");只创建了一个对象,但实际是有两个内容为"aa"的对象。如果String pool中没有该对象"aa",那么会先在String pool中创建一个对象,并且之后会再次在堆(heap)中创建一个内容相同的对象并将其引用赋给s,即创建了两个引用不同的对象。所以,这种方式可能会创建一个或两个对象,但最终是存在两个内容相同引用不同的对象。

 

转载于:https://www.cnblogs.com/chenliang901114/p/3290560.html

你可能感兴趣的文章
翻译3
查看>>
reactnative图片排列
查看>>
Linux终端相关知识
查看>>
[Swift]LeetCode538. 把二叉搜索树转换为累加树 | Convert BST to Greater Tree
查看>>
拼接sql
查看>>
[GIF] Parenting in GIF Loop Coder
查看>>
vimium
查看>>
python基础之数据类型
查看>>
EntityManager方法简介
查看>>
codeforce 830A Office Keys
查看>>
错误:【No configuration found for the specified action: 'login.action' in namespace: " " 】
查看>>
C# 窗体间传值方法大汇总(转)
查看>>
C#关于多线程的笔记
查看>>
js切换背景颜色
查看>>
[数据结构]哈希表
查看>>
php中global与$GLOBALS的用法及区别
查看>>
sleep
查看>>
爱因斯坦:再牛逼的伟人,也有苦逼的青春ZZ
查看>>
实战webpack系列04
查看>>
C# 字符串截取 tips
查看>>