sách gpt4 ai đã đi

Tôi đã tạo một thể hiện Integer mới nhưng nó lại cho tôi một thể hiện Long

In lại 作者:行者123 更新时间:2023-12-01 23:01:10 26 4
mua khóa gpt4 Nike

最近遇到一个Java的陷阱,代码在这里:

    Number value = new Integer(10);
value = value instanceof Long ? new Long(-value.longValue()) : new Integer(-value.intValue());

System.out.println(value instanceof Integer);
System.out.println(value.getClass());

我认为输出是:

真实
java.lang.Integer 类

但是,我错了,正确的输出恰恰相反:


java.lang.Long 类

我不明白为什么。所以我使用javap -c反汇编类文件,以下两行(指令)对我来说很奇怪:

50: i2l           
51: invokestatic #10 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
为什么?我想要与对象 giá trị 相同的实例,为什么它给了我不同的结果?

非常感谢您的帮助。

1 Câu trả lời

三元运算符?接受两个操作数,即new Long(-value.longValue())new Integer(-value.intValue() ).

根据Java语言规范http://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.6.2 ,两个操作数将首先被拆箱(Long->long)和(Integer->int),参见 http://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.8 ,然后应用以下规则:

如果其中一个操作数为 double 类型,则另一个操作数将转换为 double。否则,如果任一操作数的类型为 float,则另一个将转换为 float。否则,如果任一操作数的类型为 long,则另一个将转换为 long。否则,两个操作数都转换为 int 类型。

由于拆箱步骤之后,其中一个操作数的类型为 dài,因此另一个操作数将转换为 long。这应该可以解释你的结果。

关于java - 我新建了一个 Integer 实例,但它给了我一个 Long 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23393564/

26 4 0
Bài viết được đề xuất: java - 返回页面引用作为页面上操作的结果?
Bài viết được đề xuất: java - 如何在java中绘制自定义矩形
Bài viết được đề xuất: java - 尝试用另一个面板替换一个面板时 JFrame 崩溃
Bài viết được đề xuất: java - 替换全部 - Java
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com