Java中关于String对象引用的问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中关于String对象引用的问题?相关的知识,希望对你有一定的参考价值。

新手请教下假如我定义了一个String类的对象String str = "abc";再将其修改为String str = "def";这是str应该是指向堆内存中的def,然后我又将其改回String str ="abc";这时str会指向原来的abc,还是在堆内存中重新分配abc的空间再指向它呢??不胜感激!!

你要明白,何时分配堆内存,何时分配栈内存。
String a = "aaa";
用这种方式的时候java首先在内存中寻找"aaa"字符串,如果有,就把aaa的地址给它
如果没有则创建
String a = new String("aaa");
是不管内存中有没有"aaa"
都开辟一块新内存保存它
可以用以下方法验证下
String a = "aaa";
String b = "aaa";
String c = new String("aaa");
System.out.println(a==b);
System.out.println(a==c);
结果应该是:
true
false
此题作为java程序员笔试题几率比较高。
你要好好记住哦!O(∩_∩)O~
参考技术A 不是这样的,java5.0以后出现了一个对象池的概念,Java虚拟机在启动的时候会实例化9个对象池,这9个对象池分别用来存储8种基本类型的包装类对象和String对象,String str = "abc"这样写是从对象池中取abc的对象,如果对象池中已经有了abc这个对象,那么就不会从新给它分配新的空间了,如果这样写String str = new String("abc");就会分配新的空间 参考技术B 字符串常量本来就是一个匿名对象,string
s="哈哈"这条语句的结果是,将“哈哈”的引用,也就是在字符串常量池中的首地址赋值给s,string
s=new
string("哈哈");这句的结果是:首先会在字符串常量池中产生"哈哈"这个对像,然后再用"哈哈"这个已经存在的对象,去构造s这个对象,这样就会产生两个对象,这似乎并不是我们要的结果
参考技术C 这个你可以用一个小程序自己测试下,印象更深刻~

以上是关于Java中关于String对象引用的问题?的主要内容,如果未能解决你的问题,请参考以下文章

java中关于对象的可达可用问题

web中关于垃圾回收的一些观点

java中关于String类型对象的问题--判断是不是是相同的对象

java中关于map值修改问你

java中关于null的一些理解

(转)Java 中关于String的空对象(null) ,空值(empty),空格