高分请教一个基础问题!
请问java可以使用输出参数么?
简单的说,我在使用的时候希望一个函数有多个输出
希望函数能够修改我输入的参数。
不希望使用全局变量。
请问还有什么办法?
问题点数:0、回复次数:18Top
1 楼javafaq2004(I will survive)回复于 2004-12-03 13:57:04 得分 0
接受对象类型的参数
比如把int转换成IntegerTop
2 楼bluemeteor(挂月||Becoder)回复于 2004-12-03 13:58:01 得分 0
希望函数能够修改我输入的参数。
这个是可以实现的....java可以改变对象参数的属性值Top
3 楼zcjl()回复于 2004-12-03 14:05:43 得分 0
1.把参数放到数组中传递
2.把参数封装为class的属性,再传递class作为参数
对第一种方式的示例如下:
public static void main(String[] args) {
int[] a = {5};
int[] b = {3};
System.out.println("a = " + a[0] + "\t b = " + b[0]);
exchange(a, b);
System.out.println("a = " + a[0] + "\t b = " + b[0]);
}
public static void exchange(int[] a, int[] b) {
int temp = a[0];
a[0] = b[0];
b[0] = temp;
}
Top
4 楼rainman113d(雨)回复于 2004-12-03 14:09:34 得分 0
就是说对象的参数传递都是按引用来传递的,而普通的基本类型都是值传递。
那么数组呢?如果我用一个数组做参数。
比如写一个专门对整型数组排序的函数,现在希望把数组做为函数参数,函数的作用就是修改数组。
可以做到么?
我正在尝试。希望能够更深刻的理解参数传递,希望各位指点一下Top
5 楼classjava(原始野人)回复于 2004-12-03 14:11:34 得分 0
可以在method中用到条件
eg
int classjava()
{ int temp=0
if(xx)
temp=x;
eles if(yy)
temp=y;
return temp;
}
Top
6 楼classjava(原始野人)回复于 2004-12-03 14:16:15 得分 0
当然可以做到,只要返回类型是数组就行了Top
7 楼rainman113d(雨)回复于 2004-12-03 14:29:27 得分 0
现在又产声一个疑问。
我有两个函数,如下:
void test1(int[] data) {
data[0] = 3;
data[1] = 2;
data[2] = 1;
}
这个可行,没有问题。
但是:
void test1(int[] data) {
data = new int [] {1,2,3);
}
就不能通过,是为什么?
Top
8 楼bluemeteor(挂月||Becoder)回复于 2004-12-03 14:31:42 得分 0
数组既是对象
你的test1方法改变了对象里的属性值 这是可以的
第二个test1方法 改变了对象本身的值(对象地址) 这样是不可以的...Top
9 楼rainman113d(雨)回复于 2004-12-03 14:34:16 得分 0
哦,明白了,谢谢!Top
10 楼ww425(如果人人都学一点JAVA,这个世界将变的更加美好!)回复于 2004-12-03 14:34:27 得分 0
你data[] = {1,2,3};嘛Top
11 楼wuyuestar(五月)回复于 2004-12-03 14:38:11 得分 0
data = new int[] {1,2,3};Top
12 楼fast_time(fast_time)回复于 2004-12-03 14:44:14 得分 0
Java的参数传递就两种:值传递,引用传递Top
13 楼wuyuestar(五月)回复于 2004-12-03 14:46:00 得分 0
ft,怎么拷漏了,data = new int[] {1,2,3};改变了引用不可以.Top
14 楼rainman113d(雨)回复于 2004-12-03 14:49:43 得分 0
其实想了半天,我想要做的只是希望传递一个数组作为参数,然后在我的函数里完成这个数组的构造。但是不管怎么写,都不行。
现在还有点头晕Top
15 楼rainman113d(雨)回复于 2004-12-03 14:51:04 得分 0
恐怕是不行的。那不就成了动态数组了?Top
16 楼rainman113d(雨)回复于 2004-12-03 15:13:16 得分 0
有一个很有意思的现象。
上面的这些现象都可以有一个结论,我们不能时用一个函数内部的局部变量来初始化一个全局变量。因为局部变量所占用的内存在退出函数后会被回收。这样函数中的初始化就没有意义。如果只是通过修改属性那是可行的。
但是有另一个现象。我把一个二维数组做参数……,函数如下:
void main(){
int [][] a = new int [3][];
fun(a);
}
void fun(int [][] a){
int[] b = {1,2,3};
a[0] = b;
a[1] = b;
a[2] = b;
}
这样就能用局部变量“部分”的初始化这个二维数组。
我就有点搞不清楚这个拷贝是怎么回事?Top
17 楼drugon(更高,更远,更强)回复于 2004-12-03 15:38:01 得分 0
你这段代码在C++中当然没有问题,因为使用的都是几个基本的数据类型,你在fun函数中用几个指针或是返回一个局部指针看看能不能行。
对于基本的数据类型,没有涉及到内存地址的操作,仅仅是一个值的传递,当然不会有错了,你把上面这段代码改成Java的代码,也是没有问题的。
但是如果是对象的话,那么你这段代码十之八九是要出错的,因为对象会有内存地址的操作,也会有内存地址的回收。所以上面那段话是没有错的。另外java中的clone()有点象C++中的拷贝构造函数。拷贝构造是因为对象中有指针的存在,如果在实例化的时候,简单的用一个=来操作,那么所有的对象将会共用这个指针的内存,而有时候我们必须使各个对象有自己的内存块,不共用。这个时候拷贝构造函数就起作用了,它会使每个对象都各自有各自的内存块,不互相共用。Top
18 楼rainman113d(雨)回复于 2004-12-03 15:54:05 得分 0
但是我仍然沒有理解這個作用域的问题。我是用局部的变量来初始化,而不是修改。Top




