黑马程序员技术交流社区

标题: 数组的初始化 [打印本页]

作者: 王峰峰    时间: 2014-5-3 19:04
标题: 数组的初始化
关于数组的初始化,我们一般有两种方式:
        一、String str = new String[]{"abc","123","wff"} ;
        二、String str = {"abc","123","wff"} ;
请问下,这两种初始化有什么区别???
作者: Lin0411    时间: 2014-5-3 20:03
String不属于java中8大基本类型,但创建一个字符串对象时有一些值得注意的问题。
常量池的概念:
常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。例如:
String str1 = "abc";
String str2 = "abc";
String str2 = "ab" + "c";
则:
System.out.println( str1==str2 );
System.out.println( str1==str3 );
输出的都是true,
以这种方式创建的字符串由于利用了常量池确保只有一个拷贝。
String str1 = new String("abc");
回到楼主的问题:
{"abc","cde"};
String str2 = new String("abc");
System.out.println( s0==s1 );输出为false!!
以这种方式创建的字符串不放入常量池,它们有自己的空间。
回到问题:
   一、String str1 = new String[]{"abc","123","wff"} ;
   二、String str2 = {"abc","123","wff"} ;
第二种创建的字符冲数组是放在常量池空间中的!!第一种有自己的存放空间。
我们发现System.out.println( str1[0]==str2[0] );输出为false.
假如是这样:
一、String[] str1 = {"abc","123","wff"} ;
二、String []str2 = {"abc","123","wff"} ;
System.out.println( str1[0]==str2[0] );输出为false!!!
作者: Lin0411    时间: 2014-5-3 20:05
打错字了!!最后应该是:   输出为true!!!
作者: 大恶魔先森~    时间: 2014-5-3 21:34
问题写错了吧,应该是这样的:一、String str = new String[]{"abc","123","wff"} ;
                                          二、String str[] = {"abc","123","wff"} ;
第一种是一般形式的赋值,但是千万要注意String[] str = new String[]{};这种类型的赋值是要避免的,如此定义就相当于创建了一个长度为0的字符串数组,在后面的赋值中会引起异常。
第二种是数组初始化式,只能用在数组声明的同时进行赋值的情况下。




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