向方法中传递数组
在java中,所有对象都是通过引用进行操作的。而数组也是一种对象,当把数组作为参数传递给方法时,传递的实际上就是数组对象的引用。在方法中对数组的所有操作,都会映射到原数组中。而所谓的"引用",就是java对象在堆内存的地址赋给了多个"栈内存"的变量既然方法可以接收一个数组,那么方法也就可以返回一个数组,则此时,只需要在返回值类型声明处明确的写出返回的数组类型即可。
数组可以作为方法的参数。
当调用方法的时候,向方法的小括号进行传参,传递进去的其实是数组的地址值返回值类型:只是进行打印而已,不需要进行计算,也没有结果,用void
但是java.util.Collections类的unmodifiableList()方法接受List接口的一个对象(实现其类的对象),并返回给定对象的不可修改形式。用户仅对获得的列表具有只读访问权限。
ArrayList类的asList()方法接受一个数组并返回一个List对象。
因此,要转换一个不可变的数组-获得所需的数组。
使用asList()方法将其转换为列表对象。首先给出结论:Java 程序设计语言对对象采用的不是引用调用,实际上,对象引用是按值传递的。(出自java核心技术卷一,第4章对象与类)
在刷leetcode时看到这样一道题:
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。在编程语言中调用函数时的参数传递分为值传递和引用传递,在学习Java的时候一般会见过这样一句话:基本数据类型使用值传递、对象使用引用传递。
对于值传递自然好说,传入方法的是变量的值,拥有可变参数的方法可以被重载,在调用方法的时候,如果能够和固定参数的方法匹配,也能够与可变长参数的方法匹配,则选择固定参数的方法。一个方法只能有一个可变长参数,并且这个可变长参数必须是该方法的最后一个参数编译器虽然知道怎么调用,但人容易陷入调用的陷阱及误区第一个能编译通过,这是为什么呢?事实上,base对象把子类对象sub做了向上转型,形参列表是由父类决定的,当然能通过。再看看子类直接调用的情况,这时编译器看到子类覆写了父类的print方法,因此肯定使用子类重新定义的print方法,尽管参数列表不匹配也不会跑到父类再去匹配下,因为找到了就不再找了,因此有了类型不匹配的错误。
这是个特例,重写的方法参数列表与父类不相同,这违背了重写的定义,并且会引发莫名其妙的错误。在这里,我们再复习下重写必须满足的条件:
1)重写方法不能缩小访问权限;
2)参数列表必须与被重写方法相同(包括显示形式);
3)返回类型必须与被重写方法的相同或是其子类;
4)重写方法不能抛出新的异常,或者超过了父类范围的异常,但是可以抛出更少、更有限的异常,或者不抛出异常。
可以,操作代码如下:
public class ArrTest{
public static void doTest(String[] args){
for(int i=0i<args.lengthi++){
System.out.println(args[i])
}
}
public static void main(String[] args){
String[] testArr = {"a","b","c","d"}
ArrTest.doTest(testArr )
}
}
扩展资料:把数组作为参数传入一个方法,在该方法中对数组进行一些操作:如果仅仅是插入数据项等一般操作,那么该操作会影响到数组本身;反之,如调整数组大小、对数组赋值等操作,则对数组本身没有影响。
例子:
public class Tester {<br data-filtered="filtered">
public static void counter(int count) {<br data-filtered="filtered">
count = 2<br data-filtered="filtered">
}<br data-filtered="filtered">
<br data-filtered="filtered">
public static void changeA1(int[] ints) {<br data-filtered="filtered">
int[] temp = { 4, 5, 6 }<br data-filtered="filtered">
ints = temp<br data-filtered="filtered">
}<br data-filtered="filtered">
<br data-filtered="filtered">
public static void changeA2(int[] ints) {<br data-filtered="filtered">
ints[0] = 4<br data-filtered="filtered">
ints[1] = 5<br data-filtered="filtered">
ints[2] = 6<br data-filtered="filtered">
}<br data-filtered="filtered">
<br data-filtered="filtered">
public static void main(String[] args) {<br data-filtered="filtered">
// Output: 1<br data-filtered="filtered">
// 基本数据类型没有改变。<br data-filtered="filtered">
int count = 1<br data-filtered="filtered">
counter(count)<br data-filtered="filtered">
System.out.println("count: " + count)<br data-filtered="filtered">
<br data-filtered="filtered">
<br data-filtered="filtered">
int[] ints = { 1, 2, 3 }<br data-filtered="filtered">
<br data-filtered="filtered">
// Output: 1, 2, 3<br data-filtered="filtered">
// 对数组赋值,不会改变原始数组。<br data-filtered="filtered">
changeA1(ints)<br data-filtered="filtered">
for (int i = 0i <ints.lengthi++) {<br data-filtered="filtered">
System.out.print(ints[i] + " ")<br data-filtered="filtered">
}<br data-filtered="filtered">
<br data-filtered="filtered">
// Output: 4, 5, 6<br data-filtered="filtered">
// 可以对数组插入新的数据项。<br data-filtered="filtered">
System.out.println()<br data-filtered="filtered">
changeA2(ints)<br data-filtered="filtered">
for (int i = 0i <ints.lengthi++) {<br data-filtered="filtered">
System.out.print(ints[i] + " ")<br data-filtered="filtered">
}<br data-filtered="filtered">
}<br data-filtered="filtered">
}
举个例子和你说。传递数组参数:1. 传递数组要传递数组到方法里,只要指明传入的参数是一个数组即可。例:public class ArrayDemo //定义主类{public static void main(String args[]){int a[]={8,23,7,6,9,23} //定义一维数组 ArrayDemo min=new ArrayDemo () //创建对象min.arrayMin(a)//将一维数组a传入least()方法}public void arrayMin(int array[]) //参数array[]接受一维整形数组{int temp=array[0] for(int i=0i<array.lengthi++) if(temp>array[i])temp=array[i] System.out.println("最小的数为:"+temp)}}从该例中可以看出,如果要将数组传递到方法里,只需在方法名后的括号内写上数组的名即可。二维数组的传递与一维数组相似,在需在方法里声明传入的参数是一个二维数组。