共8条回复
楼长
·
tinyfool
回复于 2014年04月22日
- char[]不是对象
- 学东西不要太纠结小细节,先学进去,慢慢体会这些细节,而不是一开始就纠结在里面
2楼
·
小时候可帅啦
回复于 2014年04月24日
your char[] data is a variable created at stack, the String str is a String object created at heap
--- based on c++; check out new keyword.
3楼
·
byunting
回复于 2014年04月24日
4楼
·
amosji
回复于 2014年04月24日
楼长说的对!
5楼
·
yellowb
回复于 2014年04月25日
对于String str = "abc"来说,如果你把char[]也看作对象的话,那的确是有2个对象:一个char[],一个String。
其实看看String的源码就知道里面有个属性:
/** The value is used for character storage. */
private final char value[];
但是对于char data[] = {'a', 'b', 'c'}; String str = new String(data);来说,总共产生应该是有3个对象(2char[] + 1String),因为public String(char value[])最后会调用 Arrays.copyOf,也就是说创建了另一个新的char[]并且把data中的数据拷贝进去了。
6楼
·
Palm
回复于 2014年04月26日
1.这里确切的说是创建了两个堆实体, 一个是 "abc" 另一个是 new String(data) 因为String的池在这里没有作用
2.你说 char[] 是对象是错误的 根据面向对象语言的基本语法 类 引用 = new 类(); 你可以得到你想要的答案
另 你说的str 是对象是可以这么说的 因为String 比较特殊<在java语法中 C++ 或c#不了解>
7楼
·
玉楼
回复于 2014年04月26日
你这一个问题包含了很多内容:
- 你要理解什么是基本类型,什么是对象。cha[]就是基本类型,String类的实例str就是对象。
- 你使用Object-C就要知道内存的分配方式:堆、栈、全局/静态区、常量区和代码区。
String str="abc";和char data[] = "abc"; String str = new String(data);是不完全一样的。前一句在常量区里存了"abc"之后,new一个String实例,再把"abc"复制到str中去;后者却是多了一个栈内的char数组做中转。当然,结果是一样的,而且编译器也可能存在优化,省去中转过程。
8楼
·
大屌哥
回复于 2015年07月21日
小伙子,不要疑惑 下个Eclipse Bytecode 插件,一目了然