String类对象两种实例化方式比较
2024-09-01 18:09:15
第一种:直接赋值
String str = "hello!" ;
在java中,有一个字符串常量池,对于这种直接赋值的,会直接写进常量池(常量池里面不存在其value,)
自JDK1.7后,常量池也属于堆内存;
所谓的直接赋值,描述的是将一个匿名对象设置一个具体的引用名字
第二种:构造方法
String str = new String("hello!");
这样会开辟两块堆内存,第一块是由“hello!”这个匿名对象开辟,第二块是new开辟
首先会检查常量池里面是否存在“hello!”,如果不存在,则在常量池开辟一空间,然后new出来的String实例,也会在堆内存开辟空间
一般是使用new开辟的那一块空间,而字符串常量池那块内存,将会成为垃圾空间
package Class_String; public class Dome {
public static void main(String[] args) {
String str1 = "123" ;
String str2 = new String("123") ;
String str3 = new String("123") ; System.out.println(str1 == str2) ; //false System.out.println(str1 == str2.intern()); //true System.out.println(str2 == str3); //false
}
}
面试题:解释String类两种对象实例化方式的区别
直接赋值:只产生一个实例化对象,并且自动保存到常量池中,可以实现字符串实例的重用
构造方法:产生两个实例化对象,并且不会入池,无法实现重用,可以通过手工intern()方法入池,
一般情况下使用直接赋值,因为效率更高,
最后,因为我也是刚开始学java,或许会有不足之处,
欢迎有疑惑的 or 有不同意见的,可以在下面进行评论,喵~~
最新文章
- widows和Linux java加密注意事项
- 常用的WebForm 控件
- os 模块
- [NOIP2011]观光公交 题解
- [转]C# 连接 Oracle 的几种方式
- A simple Snippet in ST2
- windows下scrapy 的安装
- 关于c#调用C++代码的一些应用的体会
- android doc 本地文档加载慢的解决办法
- 计算json的和
- IO流基础
- Android小记之--android:listSelector
- SQL整理5
- 10步完成Abp(.net core)+Vue的Demo?
- Redis Cluster部署、管理和测试
- .net core 1.0 中的asp.net identity 基本使用(二)
- 解决Scrollview 嵌套recyclerview不能显示,高度不正常的问题
- 安卓开发笔记(二十六):Splash实现首页快速开屏功能
- springmvc整合swagger
- python---反射详解