关于String str = new String();和String str = "";的区别
当我们使用String str1 = new String("hello");实例化时,由于两个引用对象的地址不同,所以==的结果为false,但当使用String str3 = "hello";赋值时,==的结果为true,若理解为赋值时,内容相同的字符串指向同一地址,那为什么修改str4的值时不会影响str3的值呢,如果不这样理解,那使用String str = "hello";这样的方式赋值时,str是否为String类型的对象呢,两种方式的区别在哪里呢
正在回答
同学您好,
str1和str2为引用数据类型,创建对象实例化,会在内存中开辟两块内存空间,两个对象分别指向不同的堆内存空间,所以这里的str1和str2比较为false,而str3和str4两个变量只是基本数据类型,比较的仅仅是值
“那为什么修改str4的值时不会影响str3的值呢”:因为str4和str3是两个不同的变量,其中一个变量的改变并不会影响另一个变量的改变
“那使用String str = "hello";这样的方式赋值时,str是否为String类型的对象呢”:这里的str并不是String类型的对象,因为并没有创建对象,这段代码代表的str是一个String类型的变量。
“两种方式的区别在哪里呢”:这两种创建方式在应用上没有特别大的区别,只是内存的存储位置不同,一个存储在常量池中,一个存储在堆中,String str3 = "hello";这句代码是在常量池中创建hello字符串对象,变量str3是对常量池中该对象的引用,而String str1 = new String("hello");,通过new关键字创建的对象,会在堆内存中开辟空间;所以这句代码是指,如果常量池中没有hello这个字符串对象,会在常量池中创建,并且还会在堆内存中创建一个对象,变量str1是堆中对象的引用
祝同学学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星