关于 String str = "test" 与 String str = new String("test")

Deadly 提交于 2020-02-27 01:41:54

对于String str = “test” 的分析

首先会检查字符串池中是否存在"test" 字符串,如果没有则会创建一个"test"
字符串放进字符串池中,并且会让str指向"test"。 如果已经存在"test"字符串,
则,后面创建的字符串对象会指向同一个"test",使得两个字符串地址相同。
	String str1 = "test";
	String str2 = "test";
	System.out.println(str1 == str2); //true

对于String str = new String(“test”)的分析

使用new 创建字符串时,仍然会首先检查字符串常量池中是否有相同的字符串,如果
有就会拷贝一份放到堆中,然后返回堆中的地址; 如果常量池中没有则会在堆中创建
一份,返回堆的地址。
	String str1 = new String("test");
	String str2 = new String("test");
	System.out.println(str1 == str2); //false
	//这里要知道用构造器创建的对象,是不会被放入常理池中的,而是会再堆区中
	//开辟一块空间进行存储,两对象地址不相同,所以结果为false

两种创建方式结果的对比

	String str1 = "test";
  	String str2 = new String("test");
  	System.out.println(str1 == str2); //false
  	//通过分析很明显这两对象的地址不是同一个 
注: 对于使用new 创建字符串可以说 无论常量池中是否存在与要创建的字符串相同的字符串,都会在堆空间中创建一份,这是一种浪费空间的操作,在开发中并不是最佳的选择。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!