A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗海云 中级黑马   /  2013-2-27 08:39  /  1628 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 罗海云 于 2013-2-27 10:14 编辑

如果说我定义一个数组
String s = "abc"   是不是就等价于char[] arr = {'a','b','c'};  然后再String ss = newString(arr);    前面那个就相当于自动装箱了....但是我看String也不是基本数据类型...啊.他为啥还有一个new String呢..岂不是多此一举吗?

5 个回复

正序浏览
String ss = newString(arr);       ss是放在栈的相当于我们的门牌号,而arr的值却是存放在堆里的,

41.jpg (23.63 KB, 下载次数: 24)

如图

如图
回复 使用道具 举报
1、Srtring类型非基本类型,但是值会通基本类型一样存放在栈内存的常量池中。每次生成前都会检查,是否已存在该值,若有则直接返回地址而不重新生成。
2、String s = "abc" :栈内存生成String的引用s,直接指向常量池中"abc”的地址;
3、String ss = newString(arr);    动作分解如下:1、在栈内存开辟名为ss的String类型的引用。2、在堆内存生成String对象(通过调用String类中cha[]参数的构造方法生成本对象)3、将新生成的String对象的值在常量池中搜索,发现已存在"abc”,则将"abc”的地址赋给String对象;4、将该String对象的地址值赋给ss引用。
   把这个过程看懂了,你的问题就解决了。
回复 使用道具 举报
String s = "abc"   是不是就等价于char[] arr = {'a','b','c'};   首先 不等价char[] arr = {'a','b','c'};  基本类型 String s = "abc"引用类型
String 类不是基本类型没有装箱这一说
回复 使用道具 举报
char[]是基本类型,所以arr存储在堆里,然后用new String(arr)获得arr对象,String ss=new String(arr)是在栈内存里申请一个ss变量(类似于c中的指针)指向堆中的arr,这样的好处是可以定义多个不同变量指向同一个堆内存对象,如还可以String sss=new String(arr);这样sss和ss都指向同一个堆内存对象arr,为了使用方便,所以不是多此一举,看你有什么用途了,all啦!
回复 使用道具 举报
char[]是基本类型,所以arr存储在堆里,然后用new String(arr)获得arr对象,String ss=new String(arr)是在栈内存里申请一个ss变量(类似于c中的指针)指向堆中的arr,这样的好处是可以定义多个不同变量指向同一个堆内存对象,如还可以String sss=new String(arr);这样sss和ss都指向同一个堆内存对象arr,为了使用方便,所以不是多此一举,看你有什么用途了,all啦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马