Java数组当参数传递
Ⅰ java里数组如何作为参数传递给方法,以及如何在方法中返回数组
定义方法的时候可以在参数列表中定义传入参数的类型 例如
void method( int[] a)
或者使用可变参数
void method(object…obj)
而方法的返回值在方法内使用return定义 同时方法定义中的返回值类型也要同 return后的数据类型一致
例如
public int[] method(){
//代码块…
return 数组名;
}
希望能帮到你
Ⅱ java数组作为参数传入函数怎么让他不变化
您不能使数组的元素不变。但是方法中也可用来传递和返回数组。如果要向方法中传递一个数组,则方法的接收参数处必须是符合其类型的数组。而且数组属于引用数据类型,所以在把数组传递进方法之后,如果方法对数组本身做了任何修改,修改结果都是会保存下来的。
向方法中传递枣扮穗数组
在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)重写方法不能抛出新的异常,或者超过了父类范围的异常,但是可以抛出更少、更有限的异常,或者不抛出异常。
Ⅲ java数组参数如何传递
int型的数据是一个常量,存在于一个常量池中,当修改池中的值时,如果产生的新值,在原池中没有这个值,就会在池中创建一个新的。其实以上过程又创建了新的常量。
java中对于数组,是当作一个对象来看待的,你传递的是一个引用,也就是内存地址,在这个过程中,只存在一个对象,并没有创建新的对象,所有修改的只是这一个对象。
以上纯属我的个人理解。
Ⅳ java 字符串数组作为参数传递结果未初始化
我明白你的意思。你是说result这个数组作为参数传递进去,在执行Converse方法后为啥还是null对吗。其实是这样。引用传递没错。但是你忘记了一件事。String [] result没有初始化,那么其实String [] result = null;所有成员变量会默认初始化,只不过引用型默认为null。这样一来,result=null。相当于你在Converse(input,result)时传了null进去。这时,pOutput=result ,即pOutput=null,执行这一句pOutput = wordArray.split(" ")后pOutput指向了一个String[]对象不为null了,但是方法结束后pOutput就弹栈了就死了而result还指向null;因此当该方法结束后result还是null。
Ⅳ Java的数组作为参数传入方法和C语言的不同
首先,数组名不是指针,只不过作为参数或返回值时会退化为指针,其次,java 使用值传参(pass_by_value)的方式来传递函数参数,只是值传递方式在处理原始数据类型参数与引用类型参数时候有不同,如果一个参数是原始数据类型,那么参数变量的值传递进去,如果要修改,需要传递引用类型
Ⅵ java类中用类的数组作为函数参数传给类,为什么不能直接对类的数组进行操作
你说不行的代码段,关键在这:(简称为代码①)
Student stu[] = new Student[5];
Admin a = new Admin();
a.wyx(stu);
以及调用的时候:(简称为代码②)
public void wyx(Student stu[])
{
Scanner in = new Scanner(System.in);
String name = in.nextLine();
stu[0].setName(name);
System.out.println(stu[0].getName());
}
而后面你说可以的方法是这样的(简称为代码③)
public void wyx(Student stu[])
{
Scanner in = new Scanner(System.in);
String name = in.nextLine();
Student stud = new Student();
stud.setName(name);
stu[0] = stud;
System.out.println(stu[0].getName());
}
为什么不可以?这里你首先要清楚你在wyx方法里用到的形参是一个Student对象的数组,在代码②中,你直接使用stu[0].setName(name);,那么要想取得它的前提就是你的下标0有存在的对象,也就是你必须在你代码①里给你的stu 对象的0下标赋值,也就是:
stu[0] = new Student();
否则你只是给数组开辟了大小,但并未在相应的位置给定实例化的对象,那么你在代码段②敏宴里直接引用是引用到空指针铅拿桐上的,并不存在对象。恰好你在代码①中就只是使用了
Student stu[] = new Student[5];
并没有对数组里的做对象的初始化,所有你这个代码运行时会出错。
代码段③里,就恰恰符合上面所说,你创建一个新的对象:
Student stud = new Student();
再给它赋值了name,最后把这个对象给了stu数组对象的0下标
stu[0] = stud;
这样你的stu[0]具有正确的对象引用,你在后面的输出中调用它就正常了。
如果说你要前面方法可用,改为下面方式:
public class 类对类的操作 {
public static void main(String[] args)
{
Student stu[] = new Student[5];stu[0] = new Student(); -- 这里创建一个新的Student实例,并让stu[0]引用,只槐坦是根据你后面方法只引用了stu[0]
Admin a = new Admin();
a.wyx(stu);
}
}
另外有一些简单的建议:
你的代码段里对数组的写法使用的是Student stu[],那么比较建议的写法是Student[] stu;
如果你真的要传递Student stu[] = new Student[5];,那么有两种建议:
① 你给你的数组对象先实例化好,可以用循环,如果没学到循环,可以一个一个创建;
② 如果不想在创建时候就实例化,那么也可以在使用的时候进行判断,判断如果是空引用,不包含对象再进行实例化,关键代码如下:
if (null == stu[0]) {
stu[0] = new Student();
}
Ⅶ JAVA程序中数组传递给参数的问题,【代码1】【代码2】如何填写!
占个位置。。。。
希望选我为最佳答案,谢谢!!!
可根据提示,将对应内容填入即可
第一个地方:computer调用average(double x[])方法,将数组a传递给参数x
填入:computer.average(a);
第二个地方:computer调用average(double x[])方法,将数组b传递给参数x
填入:computer.average(b);
说明:
就是调用类下的方法,传入说明的中参数,就可以返回需要的值!
Ⅷ java中 数组可以作为形式参数传递到调用的方法中吗要怎么操作
可以,操作代码如下:
public class ArrTest{
public static void doTest(String[] args){
for(int i=0;i<args.length;i++){
System.out.println(args[i]);
}
}
public static void main(String[] args){
String[] testArr = {"a","b","c","d"};
ArrTest.doTest(testArr );
}
}
(8)Java数组当参数传递扩展阅读:
把数组作为参数传入一个方法,在该方法中对数组进行一些操作:如果仅仅是插入数据项等一般操作,那么该操作会影响到数组本身;反之,如调整数组大小、对数组赋值等操作,则对数组本身没有影响。
例子:
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 = 0; i < ints.length; i++) {<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 = 0; i < ints.length; i++) {<br data-filtered="filtered">
System.out.print(ints[i] + " ");<br data-filtered="filtered">
}<br data-filtered="filtered">
}<br data-filtered="filtered">
}
Ⅸ java 函数参数是数组的时候传递的是值还是引用如果想让他传递数组的
应该是传值的,参考如下内容:
被当作参数传入的变量仍然保持了原来的值不变。如果我们把传入的int型变量改为Object型也是纤此一样的镇竖睁,因为Java通御岁过传值来传递引用的