H5W3
当前位置:H5W3 > 其他技术问题 > 正文

一道JAVA面试题,关于int和Integer,String和StringBuffer,有点不太懂。

题目是这样。

public class T_Three {
    public void increment(int a, Integer b, String c, StringBuffer d) {
        a++;
        b++;
        c = c + " world";
        d.append(" world");
    }

    public static void main(String[] args) {
        int a = 0;
        Integer b = new Integer(0);
        String c = "hello";
        StringBuffer d = new StringBuffer("hello");
        new T_Three().increment(a, b, c, d);
        System.out.println("a=" + a + " b=" + b + " c=" + c + " d=" + d);
    }
}

问输出的结果
a=? b=? c=? d=?

然后我在IDE上试了一下。输出的结果是:

a=0 b=0 c=hello d=hello world

请问是为什么呢?为什么a和b的自增没有增加?为什么String没有拼接,为什么StringBuffer的append却起了作用?

Stringbuffer我个人理解是append操作的就是传进来的对象,所以对其起了作用。
c没有拼接是因为操作的是函数自身的c,并不影响外面的c。
可是Integer和int我就不太懂了。

不知道我理解对不对,希望各位指导一下。

回答:

a, c 是传值, 所以函数内的 a, c 是 a,c 的拷贝. b, d是传引用, 但是 Integer 是 immutable, 自身的值无法改变. 所以只有 d 的值会变.

回答:

都是值传递啊。a=0 这个不用说了吧。b 虽然是个对象,传递给方法的是对象的引用,但是在方法中并没有改变引用指向的内容,而是改变了引用的值。c 也是同样的道理。d 就不一样了,改变了引用指向的内容。

本文地址:H5W3 » 一道JAVA面试题,关于int和Integer,String和StringBuffer,有点不太懂。

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址