为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

FFIVE 2019-01-18 03:20:46
题目是这样。 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我就不太懂了。 不知道我理解对不对,希望各位指导一下。
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

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

查看完整回答
反对 回复 2019-02-12
?
繁花如伊

TA贡献2012条经验 获得超12个赞

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

查看完整回答
反对 回复 2019-02-12
  • 2 回答
  • 0 关注
  • 554 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信