黑马程序员技术交流社区

标题: 各位帮忙看看啊…… [打印本页]

作者: ゞ心痛-τ._煩離    时间: 2013-10-19 17:43
标题: 各位帮忙看看啊……
本帖最后由 ゞ心痛-τ._煩離 于 2013-10-20 11:33 编辑
  1. public class Test {
  2. public static void add3(Integer i){
  3.         int val=i.intValue();
  4.         val+=3;
  5.         i=new Integer(val);
  6. }
  7. public static void main(String[] args) {
  8.         Integer i=new Integer(0);
  9.         add3(i);
  10.         System.out.println(i.intValue());
  11. }
  12. }
复制代码
运行结果为什么是0而不是3啊??
作者: 龏鈊づ廱鵆ぐ    时间: 2013-10-19 18:00
int 是基本类型,传进去的是i的值,i在内存中的值没有改变。byte,char,short,int,long,float,double,boolean传的只是值,除了这八种,其他传的是引用才会改变值
作者: 瓶中人    时间: 2013-10-19 23:00
只是add3(Integer i)是一个没有返回值的方法,你只有调用了方法,也就是说你的就是只是有add3(Integer i)中作出了改变,却没有对main()方法中的i产生影响,所以结果只能是0罗。如果你在add3(Integer i ) 中加一句System.out.println(i);结果就是3了。
作者: 秦大忠    时间: 2013-10-20 01:45
瓶中人 发表于 2013-10-19 23:00
只是add3(Integer i)是一个没有返回值的方法,你只有调用了方法,也就是说你的就是只是有add3(Integer i)中 ...

package qin.com;

public class Demo3 {
        public static int add3(Integer i){
                int val=i.intValue();
                val+=3;
                i=new Integer(val);
                return i;
        }
        public static void main(String[] args) {
                Integer i=new Integer(0);
                add3(i);
                System.out.println(i.intValue());
        }
}打印结果一样为0
作者: 瓶中人    时间: 2013-10-20 08:22
你有点理解错我的意思
就算有返回值,但如果没有变量接收也没有作用
就这样改
public class Demo3 {
        public static int add3(Integer i){
                int val=i.intValue();
                val+=3;
                i=new Integer(val);
                return i;
        }
        public static void main(String[] args) {
                Integer i=new Integer(0);
                 i  =  add3(i);
                System.out.println(i.intValue());
        }
}
作者: 未知数|X|    时间: 2013-10-20 08:28
秦大忠 发表于 2013-10-20 01:45
package qin.com;

public class Demo3 {

你的输出方式错了你这样输出的话还是输出的是那个局部中的值,add3(i);本来是返回一个int类型的值,你并没有用变量接收它,试试这样int num=add3(i);
System.out.println(num)或者直接输出Ssytem.out.println(add3(i));这样返回的就是3了
作者: zhou5852    时间: 2013-10-20 08:46
额  看main函数中的第二行,就是调用add的方法,add(i)此时 将i的传递给函数内部,然后函数内部怎么处理的呢?
  1.      int val=i.intValue();    //取出来i对象的值 赋给val
  2.                 val+=3;                //然后将取出来的值+3,此时val = 3是吧。
  3.                 i=new Integer(val);//关键一步!! 又使用new 关键字在内存中生成了个3 是吧,然后 变量i 指向了一个新的对象    你是不是认为这个i 还是你传进去的i呢? 它已经不是了,它是一个新的对象的引用,与你刚开始传入的没什么关系。再返回也就是返回新的对象。自己仔细琢磨一下。


  4.                 return i;
复制代码

作者: 黄文伯    时间: 2013-10-20 09:41
亲,如问题已解决请将分类的“未解决”改为“已解决”。以后的问题贴也要及时更改分类哦~
作者: 张俊生    时间: 2013-10-20 10:25
文伯辛苦了啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2