黑马程序员技术交流社区
标题:
基本数据类型引用,在函数中问什么不能改变其值
[打印本页]
作者:
犹豫铅笔
时间:
2014-10-23 11:22
标题:
基本数据类型引用,在函数中问什么不能改变其值
本帖最后由 犹豫铅笔 于 2014-10-23 11:24 编辑
我认为结果是:
10
10
可是实际结果是:
0
0
下面试代码,求各位大神帮分析下:
public static void main(String[] args) {
Long l = new Long(0);
Integer i = new Integer(0);
change(l,i);
System.out.println(l);
System.out.println(i);
}
private static void change(Long l, Integer i){
for(int j = 0; j< 10; j++){
l++;
i++;
}
}
复制代码
作者:
香草芭芙
时间:
2014-10-23 12:04
C/C++中的 形参,实参,传值,传地址,传引用 的问题,
package com.itheima.net;
public class Test
{
public static void main(String[] args)
{
Long l = new Long(0);
Integer i = new Integer(0);
change(l, i);
System.out.println(l);
System.out.println(i);
//---------------------------------
Long[] arrL = { (long) 0 };
Integer[] arrI = { 0 };
change(arrL, arrI);
System.out.println(arrL[0]);
System.out.println(arrI[0]);
}
private static void change(Long ll, Integer ii) //传值 :是把是实参的值赋给形参,形参的更改不会影响实参的值
{
for (int j = 0; j < 10; j++)
{
ll++;
ii++;
System.out.println(ll + "," + ii);
}
}
private static void change(Long[] arrL, Integer[] arrI) //传地址: 传递地址以后,系统在栈中开辟空间存放地址,
//实参和形参都指向同一个对象,形参的更改将 影响实参的值
{
for (int j = 0; j < 10; j++)
{
arrL[0]++;
arrI[0]++;
System.out.println(arrL[0] + "," + arrI[0]);
}
}
}
复制代码
作者:
犹豫铅笔
时间:
2014-10-23 12:14
香草芭芙 发表于 2014-10-23 12:04
C/C++中的 形参,实参,传值,传地址,传引用 的问题,
ll++更改的是引用ll的值,还是ll所指向的内存空间中的值?
作者:
香草芭芙
时间:
2014-10-23 17:04
我觉得问题出在Java中的包装类 装箱和拆箱, 不然 long l = 0; int i = 0; 这么写的话, 肯定不会有疑惑吧, 我想证明这个, 把eclipse调到1.4 去执行, 结果整个项目类完蛋了, 调整回来还是出错, :'(
作者:
Mr.Ni
时间:
2014-10-24 00:26
本帖最后由 Mr.Ni 于 2014-10-24 00:49 编辑
class Test_ab
{
public static void main(String[] args)
{
long a=0;
int b=0;
change(a,b);
System.out.println(a);
System.out.println(b);
}
private static void change(long x,int y)
{
for(int j =0; j<10; j++)
{
x++;
y++;
}
System.out.println(x);
System.out.println(y);
}
}
复制代码
打印结果
10 10 0 0
作者:
犹豫铅笔
时间:
2014-10-24 08:54
Mr.Ni 发表于 2014-10-24 00:26
打印结果
10 10 0 0
嗯嗯,知道了,可能是我转牛角了,想知道原因
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2