第一种:直接赋值

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 有不同意见的,可以在下面进行评论,喵~~

最新文章

  1. widows和Linux java加密注意事项
  2. 常用的WebForm 控件
  3. os 模块
  4. [NOIP2011]观光公交 题解
  5. [转]C# 连接 Oracle 的几种方式
  6. A simple Snippet in ST2
  7. windows下scrapy 的安装
  8. 关于c#调用C++代码的一些应用的体会
  9. android doc 本地文档加载慢的解决办法
  10. 计算json的和
  11. IO流基础
  12. Android小记之--android:listSelector
  13. SQL整理5
  14. 10步完成Abp(.net core)+Vue的Demo?
  15. Redis Cluster部署、管理和测试
  16. .net core 1.0 中的asp.net identity 基本使用(二)
  17. 解决Scrollview 嵌套recyclerview不能显示,高度不正常的问题
  18. 安卓开发笔记(二十六):Splash实现首页快速开屏功能
  19. springmvc整合swagger
  20. python---反射详解

热门文章

  1. jvm原理和代码运行的过程
  2. 死磕 java线程系列之线程池深入解析——定时任务执行流程
  3. Vue---mock.js 使用
  4. 重磅!微软发布 Visual Studio Online:Web 版 VS Code + 云开发环境
  5. CSPS模拟 69
  6. [UWP]为番茄钟应用设计一个平平无奇的状态按钮
  7. Project Euler 56: Powerful digit sum
  8. UiPath之文件操作
  9. Redis 的底层数据结构(压缩列表)
  10. 关于Python中的yield的理解