黑马程序员技术交流社区

标题: String类的split()方法 [打印本页]

作者: redlake    时间: 2015-4-28 22:07
标题: String类的split()方法
本帖最后由 redlake 于 2015-4-28 22:14 编辑

如下代码所示,若调用String类的split()方法,返回的是一个字符数组。但是定义数组的长度如果不够,它竟然会自动增加数组长度,怎么回事?
  1. class StringTest
  2. {

  3.         
  4.         public static void main(String[] args)
  5.         {
  6.                 String s1 = new String("abcd,eahgha,djag,sjga");
  7.                 String[] s2 = new String[2];
  8.                 s2 = s1.split(",");
  9.                 for (int i=0;i<s2.length ;i++ )
  10.                 {
  11.                         System.out.println(s2[i]);
  12.                 }
  13.         }
  14. }
复制代码
编译,运行正常;结果为abcd
eahgha
djag
sjga



作者: 棉棉502    时间: 2015-4-28 22:20
数组被定义以后长度是不会发生改变的,String的split()方法会返回一个新的数组 ,s2 = s1.split(",");其实是将s2指向了这个返回的数组,原来s2指向的new String[2] 数组在堆空间已经成为垃圾了。
作者: redlake    时间: 2015-4-28 22:23
棉棉502 发表于 2015-4-28 22:20
数组被定义以后长度是不会发生改变的,String的split()方法会返回一个新的数组 ,s2 = s1.split(",");其实 ...

哦,原来是这样!谢谢哈。。
作者: fanxia_2007    时间: 2015-4-28 22:52
正如二楼所说,String是引用型数据类型。当执行方法S2=s1.split()方法时,会返回一个新的数组,S2的引用就重新指向了这个新的数组,而之前的new String[2]就会成为垃圾而占用内存。
作者: redlake    时间: 2015-4-28 23:05
fanxia_2007 发表于 2015-4-28 22:52
正如二楼所说,String是引用型数据类型。当执行方法S2=s1.split()方法时,会返回一个新的数组,S2的引用就 ...

哦,那最好的方法就是直接赋给s2了,String s2 =s1.split();
作者: rightyuan521    时间: 2015-4-28 23:27
String的split()方法会返回一个新的数组 ,s2 = s1.split(",");其实是将s2指向了这个返回的数组,原来s2指向的new String[2] 数组在堆空间已经成为垃圾了。




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