2-12第2题

2-12第2题

1
2
3
4
5
public static void main(String[] args){
    Integer one=50;
    Integer two=50;
    Integer three=100;

    System.out.println("three==one+two的结果是:"+(three==one+two));

}

这道题,两个Integer进行算术运算,比如里面的 one+two,这个表达式的值不是一个Integer吗?还是一个int值?


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
喜欢做梦的鱼 2017-03-28 18:32:19

本身对象之间是不能进行加减运算的,之所以Integer这种类型这么操作没有问题,也如楼上同学说的,包装类是比较特殊的 , 虚拟机支持自动拆装箱操作。所以,在进行这段代码的时候,比较的是常量池中的100==100,所以返回值为true.

Python工程师 2017-03-28 10:50:51

Integer one = new Integer(50);

Integer two = new Integer(50);

Integer three = new Integer(100);

Integer four =100;

System.out.println("two==one的结果是:" + (two == one));// 结果为假

System.out.println("three==new Integer(one+two)的结果是:" + (three == new Integer(one + two)));// 结果为假

System.out.println("three==one+two的结果是:" + (three == (one + two)));// 结果为真

System.out.println("four==one+two的结果是:" + (four == (one + two)));// 结果为真

System.out.println("four==one+two的结果是:" + (four == new Integer(one + two)));// 结果为假


Integer是个包装类,比较特殊,记得就行了

Python工程师 2017-03-27 18:29:26

1)选择题中是System.out.println("three==one+two的结果是:"+(three==one+two));   两个=号呀,你的是一个=,所以输出结果是不一样的。

2) one+two表达式的值是一个Integer

  • 提问者 人土土zzzzz #1
    不好意思,打错了。 one+two的值是一个Integer,那就是说这个 Integer 和 three 指向了常量池里同一块内存?是不是one+two执行的是 Integer.valueOf(one+two) 的操作,这样才可能在常量池里找100这个值,而不是在堆里创建多一块内存?
    2017-03-28 09:10:45
  • 提问者 人土土zzzzz #2
    两个Integer类==比较,比较的不应该是对象的地址吗?刚刚把 three 改成 Integer three = new Integer(100),也得到 true 的结果,搞不明白。
    2017-03-28 09:18:00
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师