高分请教一个基础问题! 接受对象类型的参数比如把int转换成Integer 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 希望函数能够修改我输入的参数。这个是可以实现的....java可以改变对象参数的属性值 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;} 可以在method中用到条件eg int classjava(){ int temp=0 if(xx) temp=x;eles if(yy)temp=y;return temp;} 现在又产声一个疑问。我有两个函数,如下: void test1(int[] data) { data[0] = 3; data[1] = 2; data[2] = 1; }这个可行,没有问题。但是: void test1(int[] data) { data = new int [] {1,2,3); }就不能通过,是为什么? 数组既是对象你的test1方法改变了对象里的属性值 这是可以的第二个test1方法 改变了对象本身的值(对象地址) 这样是不可以的... data = new int[] {1,2,3}; Java的参数传递就两种:值传递,引用传递 ft,怎么拷漏了,data = new int[] {1,2,3};改变了引用不可以. 有一个很有意思的现象。上面的这些现象都可以有一个结论,我们不能时用一个函数内部的局部变量来初始化一个全局变量。因为局部变量所占用的内存在退出函数后会被回收。这样函数中的初始化就没有意义。如果只是通过修改属性那是可行的。但是有另一个现象。我把一个二维数组做参数……,函数如下: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;}这样就能用局部变量“部分”的初始化这个二维数组。我就有点搞不清楚这个拷贝是怎么回事? 你这段代码在C++中当然没有问题,因为使用的都是几个基本的数据类型,你在fun函数中用几个指针或是返回一个局部指针看看能不能行。对于基本的数据类型,没有涉及到内存地址的操作,仅仅是一个值的传递,当然不会有错了,你把上面这段代码改成Java的代码,也是没有问题的。但是如果是对象的话,那么你这段代码十之八九是要出错的,因为对象会有内存地址的操作,也会有内存地址的回收。所以上面那段话是没有错的。另外java中的clone()有点象C++中的拷贝构造函数。拷贝构造是因为对象中有指针的存在,如果在实例化的时候,简单的用一个=来操作,那么所有的对象将会共用这个指针的内存,而有时候我们必须使各个对象有自己的内存块,不共用。这个时候拷贝构造函数就起作用了,它会使每个对象都各自有各自的内存块,不互相共用。 用数组对象创建一个学生系统 关于jdk 的logging问题 JAVA 引用拷贝和数组元素的拷贝 软件包javax.servlet.*;不存在 问题解决马上给分 我在做一个GUI查询的时候出现了这样的问题! 转行,请教! 请高手指点 我是菜鸟,请教各位,这是很实用的程序。请进入,特别是高手 菜鸟级问题:问什么不显示? 哪里有jbuilder下载? 如何转义英文单引号 java中的String类的问题
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;
}
eg
int classjava()
{ int temp=0
if(xx)
temp=x;
eles if(yy)
temp=y;
return temp;
}
我有两个函数,如下:
void test1(int[] data) {
data[0] = 3;
data[1] = 2;
data[2] = 1;
}
这个可行,没有问题。
但是:
void test1(int[] data) {
data = new int [] {1,2,3);
}
就不能通过,是为什么?
上面的这些现象都可以有一个结论,我们不能时用一个函数内部的局部变量来初始化一个全局变量。因为局部变量所占用的内存在退出函数后会被回收。这样函数中的初始化就没有意义。如果只是通过修改属性那是可行的。
但是有另一个现象。我把一个二维数组做参数……,函数如下: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;
}这样就能用局部变量“部分”的初始化这个二维数组。
我就有点搞不清楚这个拷贝是怎么回事?
但是如果是对象的话,那么你这段代码十之八九是要出错的,因为对象会有内存地址的操作,也会有内存地址的回收。所以上面那段话是没有错的。另外java中的clone()有点象C++中的拷贝构造函数。拷贝构造是因为对象中有指针的存在,如果在实例化的时候,简单的用一个=来操作,那么所有的对象将会共用这个指针的内存,而有时候我们必须使各个对象有自己的内存块,不共用。这个时候拷贝构造函数就起作用了,它会使每个对象都各自有各自的内存块,不互相共用。