在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 一道JAVA面試題,關(guān)于int和Integer,String和StringBuf

一道JAVA面試題,關(guān)于int和Integer,String和StringBuffer,有點(diǎn)不太懂。

題目是這樣。

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);
    }
}

問輸出的結(jié)果
a=? b=? c=? d=?

然后我在IDE上試了一下。輸出的結(jié)果是:

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

請(qǐng)問是為什么呢?為什么a和b的自增沒有增加?為什么String沒有拼接,為什么StringBuffer的append卻起了作用?

Stringbuffer我個(gè)人理解是append操作的就是傳進(jìn)來的對(duì)象,所以對(duì)其起了作用。
c沒有拼接是因?yàn)椴僮鞯氖呛瘮?shù)自身的c,并不影響外面的c。
可是Integer和int我就不太懂了。

不知道我理解對(duì)不對(duì),希望各位指導(dǎo)一下。

回答
編輯回答
單眼皮

a, c 是傳值, 所以函數(shù)內(nèi)的 a, c 是 a,c 的拷貝. b, d是傳引用, 但是 Integer 是 immutable, 自身的值無法改變. 所以只有 d 的值會(huì)變.

2018年4月15日 12:01
編輯回答
過客

都是值傳遞啊。a=0 這個(gè)不用說了吧。b 雖然是個(gè)對(duì)象,傳遞給方法的是對(duì)象的引用,但是在方法中并沒有改變引用指向的內(nèi)容,而是改變了引用的值。c 也是同樣的道理。d 就不一樣了,改變了引用指向的內(nèi)容。

2017年11月18日 14:43