我想知道这道题重的i到底是基本类型还是对象类型,为什么只没有变成3而是1呢,i和0分别存在内存中的什么地方

解决方案 »

  1.   

    你这个是作用域的问题啦~
    i = new Integer(3);只在方法内有效,除非return出去的:public static Integer add3(Integer i){
      i = i+3;
      i = new Integer(i);
      return i;
    }调用的地方:i = add3(i);
      

  2.   

    add3()方法里面定义的 Integer i 只有在那个方法里面有效。正确传出数据就是调用的时候要返回值。楼主你是把 main 和 add3() 两个方法里面的 Integer i 给混淆起来了
      

  3.   

    基本类型有哪些? 基本类型简单点不用new的很好区分吧。
                     字符类型char,
                     布尔类型boolean
               以及数值类型byte、short、int、long、float、double
    -----------------------------------------------------------
    你的问题可能想知道的是:值传递、引用传递这个问题。
    -----------------------------------------------------------
    看书中的基本知识吧。
      

  4.   

    Java中都是值传递的,引用也是值传递的,不过传递的值是引用的地址。方法内改变参数中引用所指向的对象,从方法返回后,方法里的对引用的地址的改变是无效的。
      

  5.   

    楼主,值既不是3也不是1吧。而是0吧。
    这里传递的i相当于一个副本,所以i的值不会变。
    好比一扇门有一把钥匙A,现在用A配了一把钥匙B,你把B修改了,A是不会变的。这里的add3方法就属于这种比喻。
    另外,如果传递的参数,调用了该对象的方法。比如obj.setXXX(param)之类的方法,那么obj将会改变。
    例子:
    public static void main(String[] args) {
    StringBuilder s = new StringBuilder("TEST");
    System.out.println(s.toString());
    test(s);
    System.out.println(s.toString());
    test1(s);
    System.out.println(s.toString());
    }
    public static void test(StringBuilder s){
    s = new StringBuilder("1212121");
    }
    public static void test1(StringBuilder s){
    s.append("A");
    }