A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ゞ心痛-τ._煩離 中级黑马   /  2013-10-19 17:43  /  1595 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ゞ心痛-τ._煩離 于 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啊??

评分

参与人数 1技术分 +2 收起 理由
黄文伯 + 2

查看全部评分

8 个回复

倒序浏览
int 是基本类型,传进去的是i的值,i在内存中的值没有改变。byte,char,short,int,long,float,double,boolean传的只是值,除了这八种,其他传的是引用才会改变值
回复 使用道具 举报
只是add3(Integer i)是一个没有返回值的方法,你只有调用了方法,也就是说你的就是只是有add3(Integer i)中作出了改变,却没有对main()方法中的i产生影响,所以结果只能是0罗。如果你在add3(Integer i ) 中加一句System.out.println(i);结果就是3了。
回复 使用道具 举报 1 0
瓶中人 发表于 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
回复 使用道具 举报
你有点理解错我的意思
就算有返回值,但如果没有变量接收也没有作用
就这样改
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());
        }
}

评分

参与人数 1技术分 +2 收起 理由
黄文伯 + 2

查看全部评分

回复 使用道具 举报
秦大忠 发表于 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了
回复 使用道具 举报
额  看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;
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 云六又一大神

查看全部评分

回复 使用道具 举报
亲,如问题已解决请将分类的“未解决”改为“已解决”。以后的问题贴也要及时更改分类哦~
回复 使用道具 举报
文伯辛苦了啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马