首页 > 编程知识 正文

java字符串数组初始化,java二维数组

时间:2023-05-04 16:37:54 阅读:18984 作者:467

本文讨论Java数组中的赋值问题。 在讨论这个问题之前必须了解一件事。 Java的数组到底是什么? 是班级,对象,还是什么其他奇怪的东西? 答案是Java中的数组本质上是对象但这个对象不是由类实例化的,而是由JVM创建的。 也就是说,很容易说明可以通过arr.length直接访问数组对象arr的数组长度。

因为Java发现数组本质上是一个对象,所以让我们来看看这样的代码是否合理。

int [ ] a={ 1,2,3 }; int[] b=new int[3]; b=a; for(intI=0; i a.length; I ) a(I )=0;

我们本来的想法是将a数组的值代入b,将a数组设为零,但我们看到a、b数组都设为零。

数组的本质是对象,所以让我们分析一下这两个代码在Java内存模型中的作用。

int [ ] a={ 1,2,3 }; 时,将生成与堆中的对象相对应的对象,其中a指向该对象,int[] b=new int[3]; 的时候,b也指向这个对象。 例如,当我们对a[0]进行修改时,实际上我们对堆中的对象进行了修改。 b数组指向此堆中的对象。 当然,b数组的值也发生了变化。

如这里所表明的,这样实际上不太合理,比较两个引用指向同一个堆中的对象,一个修改必然导致另一个修改。

那么数组赋值该怎么办呢?

一、使用for循环

int [ ] a={ 1,2,3 }; int[] b=new int[3]; for(intI=0; ia.length; I ) b(I )=a(I ); 这样可以代入操作,虽然柔软性好,但是效率是个问题。

二、使用Object的clone()

既然数组的本质是对象,他就有clone ()方法。 clone (可以使用方法复制。

int [ ] a={ 1,2,3 }; int[]b=(int[] ) a.clone ); //strong制类型转换三、使用System的静态方法arraycopy()

System提供了以下静态方法arraycopy () :

publicstaticvoidarraycopy (对象src、int srcPos、对象dest、int destPos、int length ) )。

src:源数组

srcPos:源数组的复制开始位置

dest:数组

destPos:排列配置的开始位置

长度:复制长度

你可以用它在数组之间复制:

int [ ] a={ 1,2,3 }; int[] b=new int[3]; system.arraycopy(a,0,b,0,3 ); 该方法效率高,且具有一定的灵活性。 基于数组实现的Java集合类的基础大多在复制数组时使用此方法。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。