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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© redlake 中级黑马   /  2015-4-28 22:07  /  637 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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


评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

5 个回复

倒序浏览
数组被定义以后长度是不会发生改变的,String的split()方法会返回一个新的数组 ,s2 = s1.split(",");其实是将s2指向了这个返回的数组,原来s2指向的new String[2] 数组在堆空间已经成为垃圾了。

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

回复 使用道具 举报
棉棉502 发表于 2015-4-28 22:20
数组被定义以后长度是不会发生改变的,String的split()方法会返回一个新的数组 ,s2 = s1.split(",");其实 ...

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

哦,那最好的方法就是直接赋给s2了,String s2 =s1.split();
回复 使用道具 举报
String的split()方法会返回一个新的数组 ,s2 = s1.split(",");其实是将s2指向了这个返回的数组,原来s2指向的new String[2] 数组在堆空间已经成为垃圾了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马