JAVA数组赋值的问题
答案:5 悬赏:40 手机版
解决时间 2021-04-03 03:10
- 提问者网友:niaiwoma
- 2021-04-02 03:19
JAVA数组赋值的问题
最佳答案
- 五星知识达人网友:北城痞子
- 2021-04-02 04:21
第一个5没什么说的,第二个25是因为par.objectTestSet(iArray); 时,数组iarray做为一个参数传递进去,然后在函数objectTestSet中,修改了iarray的值! 数组做为参数类似于指针,指向的是数组在内存中的地址,当函数改变传入参数的值的,实际参数的值也发生改变。
全部回答
- 1楼网友:想偏头吻你
- 2021-04-02 07:04
一个只值传递
一个是引用传递
一个是引用传递
- 2楼网友:你可爱的野爹
- 2021-04-02 06:38
建议楼主应该了解一下Java的这两个主题:
变量的使用范围
对像的生命周期
变量的使用范围
对像的生命周期
- 3楼网友:痴妹与他
- 2021-04-02 05:51
结果都是对的阿!
System.out.println("The size is " + size);
这个打印是
public static void main(String []arg){
int size = 5;
这个地方的size = 5;
至于par.primitiveTestSet(size);
这个方法 没有改变size,因为 这个方法中size是一个相当于局部变量了
在这个方法里 size是由变化的,当这个方法返回后传过来的这个size就被系统收回了!但
public static void main(String []arg){
int size = 5;
这个size是不受
par.primitiveTestSet(size);
这个方法改变的!
下面的那个是 数组,他不是基本类型,他给方法传得也不是一个具体的数,而是 引用,就是一个指向iArray这个地方的一个引用!所以以后不关在那里用了这个引用,其实都是改变这个饮用指向的那个地方的数据,
所以
par.objectTestSet(iArray);
这个方法就把
iArray[0]; 的值改变了!
所以JAVA不管什么情况下都是传得值!
这个值,对于基本数据类型 如INT LONG BYTE CHAR等都是 具体的变量数值本身,其他的引用数据类型都是引用!
记住这点你就不会混淆了!
System.out.println("The size is " + size);
这个打印是
public static void main(String []arg){
int size = 5;
这个地方的size = 5;
至于par.primitiveTestSet(size);
这个方法 没有改变size,因为 这个方法中size是一个相当于局部变量了
在这个方法里 size是由变化的,当这个方法返回后传过来的这个size就被系统收回了!但
public static void main(String []arg){
int size = 5;
这个size是不受
par.primitiveTestSet(size);
这个方法改变的!
下面的那个是 数组,他不是基本类型,他给方法传得也不是一个具体的数,而是 引用,就是一个指向iArray这个地方的一个引用!所以以后不关在那里用了这个引用,其实都是改变这个饮用指向的那个地方的数据,
所以
par.objectTestSet(iArray);
这个方法就把
iArray[0]; 的值改变了!
所以JAVA不管什么情况下都是传得值!
这个值,对于基本数据类型 如INT LONG BYTE CHAR等都是 具体的变量数值本身,其他的引用数据类型都是引用!
记住这点你就不会混淆了!
- 4楼网友:煞尾
- 2021-04-02 04:41
输出的结果完全正确。
之所以你对输出的结果有疑问,是因为你还没有理解java里面的数据类型。在java里面有两类数据,一种是值类型,还有一种是引用类型。向一个函数传值时,都是把
你的传的那个实参的值拷贝一份给形参。
例如有这么一个函数:
//此函数的功能是求两个整数的和
int sum(int a,int b)
{
int sum;
sum=a+b;
retrun sum;
}
当在主函数里面调用这个函数时:(main函数略)
int x=10,y=20;
int z=sum(x,y);//定义变量z来存放x与y的和。
这个过程是这样的。
把x的值(这里是10),y的值(这里是20),各拷贝一份,分别传个sum函数的形式参数a和b,即此时a和b分别的到了两个值,10、20。然后在函数里面定义了一个变量sum,把a、b的值相加,赋个sum,在返回sum的值。那么在函数里面的求和过程是根本涉及不到x、y的。也就是对x、y没有任何影响。因为是把x、y的值copy一份给a和b。
这是对与值类型的。
那么在java里面还有一种数据类型,叫做引用类型。我不知道你学过c语言没有,如果是学过c语言就很容易理解。这里的引用类型和c语言里面的指针类型差不多。
如有下面的函数:
void tt(int [] aa)
{
aa[0]=10;
}
在main函数这样调用:
int [] bb=new int[]{1,2,3,4,5,6};
tt(bb);
System.out.println(bb[0]);
输出结果是10
因为数组类型是引用类型。当我们调用函数tt时,把bb数组的首地址copy一份传给函数的形式参数aa,由于aa这是候拥有数组bb的地址,所以在aa里面做的修改都回体现在bb上。它修改的是内存中bb所在的那个内存中的值。
//下面是完整的测试:
//test2.java
class test2
{
public static void main(String [] args)
{
int [] aa=new int[]{1,2,3,4,5,6};
test2.tt(aa);
System.out.println(aa[0]);
int a=20,b=30;
System.out.println(test2.sum(a,b));
System.out.println("a:"+a+" b:"+b); //检查a、b的值是否改变。
}
public static void tt(int [] aa)
{
aa[0]=10;
}
public static int sum(int x,int y)
{
int sum=x+y;
return sum;
}
}
//讲了这么多不知道你听懂了没有,还没听明白的话就到百度里搜"值类型,引用类型"吧
之所以你对输出的结果有疑问,是因为你还没有理解java里面的数据类型。在java里面有两类数据,一种是值类型,还有一种是引用类型。向一个函数传值时,都是把
你的传的那个实参的值拷贝一份给形参。
例如有这么一个函数:
//此函数的功能是求两个整数的和
int sum(int a,int b)
{
int sum;
sum=a+b;
retrun sum;
}
当在主函数里面调用这个函数时:(main函数略)
int x=10,y=20;
int z=sum(x,y);//定义变量z来存放x与y的和。
这个过程是这样的。
把x的值(这里是10),y的值(这里是20),各拷贝一份,分别传个sum函数的形式参数a和b,即此时a和b分别的到了两个值,10、20。然后在函数里面定义了一个变量sum,把a、b的值相加,赋个sum,在返回sum的值。那么在函数里面的求和过程是根本涉及不到x、y的。也就是对x、y没有任何影响。因为是把x、y的值copy一份给a和b。
这是对与值类型的。
那么在java里面还有一种数据类型,叫做引用类型。我不知道你学过c语言没有,如果是学过c语言就很容易理解。这里的引用类型和c语言里面的指针类型差不多。
如有下面的函数:
void tt(int [] aa)
{
aa[0]=10;
}
在main函数这样调用:
int [] bb=new int[]{1,2,3,4,5,6};
tt(bb);
System.out.println(bb[0]);
输出结果是10
因为数组类型是引用类型。当我们调用函数tt时,把bb数组的首地址copy一份传给函数的形式参数aa,由于aa这是候拥有数组bb的地址,所以在aa里面做的修改都回体现在bb上。它修改的是内存中bb所在的那个内存中的值。
//下面是完整的测试:
//test2.java
class test2
{
public static void main(String [] args)
{
int [] aa=new int[]{1,2,3,4,5,6};
test2.tt(aa);
System.out.println(aa[0]);
int a=20,b=30;
System.out.println(test2.sum(a,b));
System.out.println("a:"+a+" b:"+b); //检查a、b的值是否改变。
}
public static void tt(int [] aa)
{
aa[0]=10;
}
public static int sum(int x,int y)
{
int sum=x+y;
return sum;
}
}
//讲了这么多不知道你听懂了没有,还没听明白的话就到百度里搜"值类型,引用类型"吧
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯