关于java的一个基础问题。

String str = new String("123"),我知道string是引用类型,str存储的是地址,那为什么直接调用str时返回的是字符串"123",而不是实际存储"123"的地址?

JVM 内存分栈、 堆、方法区三个区域。
栈:存储局部变量、引用地址
堆:存储 new 的对象
方法区:存储类的代码、 static 变量和方法、常量池


当你new的时候,在栈中创建引用变量str,地址:0x11(指向堆中的值),在堆中存放str的值123,当你使用str比如②的打印,就根据0x11这个地址去对中找到值,再打印出来。


关于字符串存储位置你可以去研究下,这个图稍微还有有点错,但意思表达明白了。

望采纳!!!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-12-21
String a="你好"; a是地址不假,但是地址指向的不是中文的你好,而是编码转换的。。
//比如:System.out.println((char)20320); 20320就表示“你”,而不是直接保存的汉字。
相似回答