ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java-String

2022-05-23 10:03:00  阅读:128  来源: 互联网

标签:Java String 对象 池中 字符串 字节 常量


1、讲一讲对String的理解

Java中的String对象特性,与C/C++不同,重点在于其不可变性。
1、不可变性:String对象值是不可改变的,一切改变String值的操作,都是重新构造新的字符串。(从缓存这种方面来答,很多对象重复,不用每次都创建新的对象)
2、存储原理:String对象存储在堆上,同样也会存在字符串常量池中,处于堆中的String对象,而GC很容易被回收,则可以通过常量池重复利用String对象。常量池是String重复利用的根本原因。
往常量池中存String对象方法有两种:
2.1显示双引号构造字符串对象
2.1使用intern方法
(注意:这两个方法不一定会在常量池中创建对象,如果常量池中已经存在相同的对象,那么就会直接返回其在常量池中对象的引用)。
2.3 String s=new String("abc");创建了两个对象,第一个是"abc"直接在常量池中创建,第二个是在堆区new String();
2、为什么String将字符数组改为了字节数组
JDK8 字符数组中每个char占两个字节,所以即使字符串只需要1字节,也需要分配两字节,浪费了一半的空间。
3、StringBuffer为什么是线程安全的
** StringBuffer是线程安全的,StringBuilder不是线程安全的。因为在StringBuffer的方法上使用了synchronized做了修饰。String Builder没有用synchronized进行修饰。
4、为什么要有常量池
可以节约大量的空间,在java中大量的对象都是String,当使用一个String对象的时候,会先查看常量池中是否存在相同的对象,如果存在则直接返回引用。
6、创建字符串的时候一定会创建String对象吗?
不一定会,比如"abc",使用intern方法
7、字符串常量池放在哪里?
JDK1.8中字符串常量池和运行时常量池
逻辑上属于方法区,但是实际存放在堆内存中**,因此既可以说两者存放在堆中,也可以说两则存在于方法区中,这就是造成误解的地方。
运行时常量池是一个统称 也包括字符串常量池,但是字符串常量池放的只是字符串,而运行时常量池中,还包括类信息,属性信息,方法信息,以及其他基础类型的的常量池比如int,long等
常量池是.java文件编译成.class文件后,可以理解为class文件的资源仓库。

标签:Java,String,对象,池中,字符串,字节,常量
来源: https://www.cnblogs.com/Alei777/p/16300097.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有