java字符串数组扩容,新人学java

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java字符串数组扩容,新人学java相关的知识,希望对你有一定的参考价值。

package com.test3;

public class DoubleSize

public static void ds(String[] a)
String[] NewA = new String[a.length*2];
for(int i=0;i<a.length;i++)
NewA[i]=a[i];

a=NewA;


public static void main(String[] args)
// TODO Auto-generated method stub
String[] a="abc","bbb","ccc";
DoubleSize.ds(a);
for(int i=0;i<a.length;i++)
System.out.println(a[i]);

System.out.print(a.length);




为什么输出长度还是3
我想实现的事一个方法能使字符串数组扩大1倍,然后在main函数里调用

参考技术A public class DoubleSize 

//方法内部不能改变参数的值,但是可以改变参数指向的值
  //这样写没有改变a,但是可以改变a[0]
/**
 * 
 * @param a
 * @param index
 */
public static void ds(String[][] a,int index)
String[] NewA = new String[a[index].length*2];
for(int i=0;i<a[index].length;i++)
NewA[i]=a[index][i];

a[index]=NewA;


public static void main(String[] args) 
// TODO Auto-generated method stub

String[][]a=new String[2][];
String[] a1="abc","bbb","ccc";
a[0]=a1;
DoubleSize.ds(a,0);
for(int i=0;i<a[0].length;i++)
System.out.println(a[0][i]);

   System.out.print(a[0].length);


参考技术B 同学NewA是指向局部变量的引用,而将数组a传到ds()函数后,在ds()函数里的a只是主函数a的一个复制并不是原来的a,当ds()调用完毕后,ds()中的NewA和a都会被回收,而主函数中的a保持不变追问

请问怎么改能达到我说的效果?

追答

怎么个意思?ds()的方法声明可不可以改?

追问

可以~只要实现我说的就行 谢谢了

追答

public class Main

public static void main(String[] args)
String[] a="abc","bbb","ccc";
a=ds(a);
for(int i=0;i<a.length;i++)
System.out.println(a[i]);

System.out.print(a.length);


public static String[] ds(String[] a)
String[] NewA = new String[a.length*2];
for(int i=0;i<a.length;i++)
NewA[i]=a[i];

return NewA;




abc
bbb
ccc
null
null
null
6

本回答被提问者采纳
参考技术C 你好,因为String 是不可变的,构造方法是final。
所以由String组成的数组也不会改变,即使你在静态方法只写个a = null;
在main里面的输出结果也不会变, 这是String数组的特性,记住即可

Java数组扩容

第一种 int[] arr2=new int[arr1.length*2] //新数组的长度

第二种 int[] arr2=java.util.Arrays.copyOf(原数组名,新数组的长度);

第三种 int[] arr2=new int[arr1.length*2] System.arraycopy(原数组名,起始下标,新数组名,起始下标,复制长度);

小例
package com.xuefei.arrayTest;

/**
 * 
 * @author 雪飞oubai
 *    数组扩容
 */

public class BigArray {
    
    public static int[] addArray(int[] arr1) {
        
         int[] arr2=new int[arr1.length*2];  //新数组长度
         for(int i = 0 ; i < arr1.length ; i++) {
             arr2[i] = arr1[i];
         }
         
         return arr2;
    }
    
    public static void main(String[] args) {
        int[] arr ={1,2};
        int[] bigarr = addArray(arr);
        System.out.println(bigarr.length);
    }

}

 

以上是关于java字符串数组扩容,新人学java的主要内容,如果未能解决你的问题,请参考以下文章

Java学习之Arrays数组

Java学习之IO流(其他操作流 操作基本数据类型操作字节数组操作字符数组操作字符串)

零基础学Java—数组工具类Arrays(十七)

每天学一点 Kotlin -- 集合:Array 数组

Java容器深入浅出之StringStringBufferStringBuilder

Java常用类