黑马程序员技术交流社区

标题: 基本数据类型引用,在函数中问什么不能改变其值 [打印本页]

作者: 犹豫铅笔    时间: 2014-10-23 11:22
标题: 基本数据类型引用,在函数中问什么不能改变其值
本帖最后由 犹豫铅笔 于 2014-10-23 11:24 编辑

我认为结果是:
                      10
                      10
可是实际结果是:
                        0
                        0
下面试代码,求各位大神帮分析下:
  1. public static void main(String[] args) {
  2.                 Long l = new Long(0);
  3.                 Integer i = new Integer(0);
  4.                 change(l,i);
  5.                 System.out.println(l);
  6.                 System.out.println(i);
  7.         }
  8.        
  9.         private static void change(Long l, Integer i){
  10.                 for(int j = 0; j< 10; j++){
  11.                         l++;
  12.                         i++;
  13.                 }
  14.         }
复制代码




作者: 香草芭芙    时间: 2014-10-23 12:04
C/C++中的 形参,实参,传值,传地址,传引用 的问题,
  1. package com.itheima.net;

  2. public class Test
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Long l = new Long(0);
  7.                 Integer i = new Integer(0);
  8.                 change(l, i);
  9.                 System.out.println(l);
  10.                 System.out.println(i);
  11.                 //---------------------------------
  12.                 Long[] arrL = { (long) 0 };
  13.                 Integer[] arrI = { 0 };
  14.                 change(arrL, arrI);
  15.                 System.out.println(arrL[0]);
  16.                 System.out.println(arrI[0]);
  17.         }
  18.         private static void change(Long ll, Integer ii) //传值 :是把是实参的值赋给形参,形参的更改不会影响实参的值
  19.         {
  20.                 for (int j = 0; j < 10; j++)
  21.                 {
  22.                         ll++;
  23.                         ii++;
  24.                         System.out.println(ll + "," + ii);
  25.                 }
  26.         }
  27.         private static void change(Long[] arrL, Integer[] arrI) //传地址: 传递地址以后,系统在栈中开辟空间存放地址,
  28.                                                                                   //实参和形参都指向同一个对象,形参的更改将 影响实参的值
  29.         {
  30.                 for (int j = 0; j < 10; j++)
  31.                 {
  32.                         arrL[0]++;
  33.                         arrI[0]++;
  34.                         System.out.println(arrL[0] + "," + arrI[0]);
  35.                 }
  36.         }
  37. }
复制代码

作者: 犹豫铅笔    时间: 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 编辑
  1. class Test_ab
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 long a=0;
  6.                 int b=0;
  7.                 change(a,b);
  8.                 System.out.println(a);
  9.                 System.out.println(b);
  10.     }
  11.          private static void change(long x,int  y)
  12.          {
  13.                 for(int j =0; j<10; j++)
  14.                 {
  15.                         x++;
  16.                         y++;
  17.                 }
  18.                 System.out.println(x);
  19.                  System.out.println(y);
  20.         }        
  21. }
复制代码

打印结果
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