黑马程序员技术交流社区

标题: 有关数组类型和String类型的思考。。。 [打印本页]

作者: 泮和顺    时间: 2012-3-10 23:22
标题: 有关数组类型和String类型的思考。。。
很纠结的问下同学们,数组和String到底是什么类型,到底为什么他们也可以new 又可以不new,怎么个回事啊。。。。。。
作者: 房宝彬    时间: 2012-3-10 23:26
引用数据类型,都可以通过字面直接赋值.

数组字面直接复制 好像是等价于NEW,记得不是很清楚了.

而String是一个特殊的类型,字面赋值 是存在常量池中,
作者: 付鹏    时间: 2012-3-10 23:28
String类型就是传说重的引用类型 哈哈
String类是final的,不可被继承。public final class String。
String类是的本质是字符数组char[], 并且其值不可改变。private final char value[];

作者: 刘蕴学    时间: 2012-3-10 23:30
在java里所有的东西都是对象,都需要创建,但是有些东西的实现方式为了编写方便做了一些处理,所以看起来有点不合理。比如字符串,比较纠结的问题就是new("123")创建几个对象的问题,如果你单拿出来,那么"123"也就是一个对象,这样就区分开了。

至于数组为什么可以不new,,,数组本身是个对象,如果写成{}这种的,其实很好理解,正常的new方式,你需要定义一个长度,并赋值所有的值,比较麻烦,写的代码也多,在已知边界和值的情况没必要写那么多,所以就有了这种写法。

不管怎么样,这只是方便开发的,编译器还是会根据你的这些代码做一样的处理。

作者: 冯旭君    时间: 2012-3-10 23:38
你是否是碰到如此问题,如String str1 = new String("aaa");和String str2  = "bbb";问题。前者new应该很好理解的,因为所有的对象都需要new(有些不是用new的是靠调用函数获得对象的)。后者就用到了java中的自动装箱。如Integer i = 24;具体自动拆箱和自动装箱是属于java5新特性的问题自己百度一下.
作者: 李征雪    时间: 2012-3-10 23:42
在String类中有一个String(String)的构造方法,String name1 = "Hello";和String name2 = new String("Hello");使用效果是一样的,String name1 = "Hello";开辟一个堆空间,而String name2 = new String("Hello");开辟两个堆空间,其中一个垃圾空间。推荐使用String name1 = "Hello";形式。
作者: 黄方    时间: 2012-3-10 23:55
对于字符串常量,如果内容相同,Java认为它们代表同一个String对象。而用关键字new调用构造器,总是会创建一个新的对象,无论内容是否相同。
 至于为什么要把String类设计成不可变类,是它的用途决定的。其实不只String,很多Java标准类库中的类都是不可变的。在开发一个系统的时候,我们有时候也需要设计不可变类,来传递一组相关的值,这也是面向对象思想的体现。不可变类有一些优点,比如因为它的对象是只读的,所以多线程并发访问也不会有任何问题。当然也有一些缺点,比如每个不同的状态都要一个对象来代表,可能会造成性能上的问题
作者: lipanfeng    时间: 2012-3-11 00:05
java 中包含两种数据类型,一种是基本数据类型,另一种就是引用类型了。数组和String属于引用类型
作者: 黑马张平    时间: 2012-3-11 15:03
学习学习!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2