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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 泮和顺 中级黑马   /  2012-3-10 23:22  /  2069 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

很纠结的问下同学们,数组和String到底是什么类型,到底为什么他们也可以new 又可以不new,怎么个回事啊。。。。。。

8 个回复

倒序浏览
引用数据类型,都可以通过字面直接赋值.

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

而String是一个特殊的类型,字面赋值 是存在常量池中,
回复 使用道具 举报
String类型就是传说重的引用类型 哈哈
String类是final的,不可被继承。public final class String。
String类是的本质是字符数组char[], 并且其值不可改变。private final char value[];

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
在java里所有的东西都是对象,都需要创建,但是有些东西的实现方式为了编写方便做了一些处理,所以看起来有点不合理。比如字符串,比较纠结的问题就是new("123")创建几个对象的问题,如果你单拿出来,那么"123"也就是一个对象,这样就区分开了。

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

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

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
你是否是碰到如此问题,如String str1 = new String("aaa");和String str2  = "bbb";问题。前者new应该很好理解的,因为所有的对象都需要new(有些不是用new的是靠调用函数获得对象的)。后者就用到了java中的自动装箱。如Integer i = 24;具体自动拆箱和自动装箱是属于java5新特性的问题自己百度一下.
回复 使用道具 举报
在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:18
7#
对于字符串常量,如果内容相同,Java认为它们代表同一个String对象。而用关键字new调用构造器,总是会创建一个新的对象,无论内容是否相同。
 至于为什么要把String类设计成不可变类,是它的用途决定的。其实不只String,很多Java标准类库中的类都是不可变的。在开发一个系统的时候,我们有时候也需要设计不可变类,来传递一组相关的值,这也是面向对象思想的体现。不可变类有一些优点,比如因为它的对象是只读的,所以多线程并发访问也不会有任何问题。当然也有一些缺点,比如每个不同的状态都要一个对象来代表,可能会造成性能上的问题

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
lipanfeng 黑马帝 2012-3-11 00:05:03
8#
java 中包含两种数据类型,一种是基本数据类型,另一种就是引用类型了。数组和String属于引用类型
回复 使用道具 举报
学习学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马