gpt4 book ai didi

java - 需要有关 Instanceof 运算符中类型转换的信息

转载 作者:行者123 更新时间:2023-12-01 07:17:18 24 4
gpt4 key购买 nike

当我将转换字符串键入对象时,以下 instanceof 运算符工作正常。

但是,如果没有类型转换,它就无法编译。

public class Test {
public static void main(String[] args) {
boolean b1 = "abc" instanceof Integer; // Compilation fails
boolean b2 = ((Object) "abc") instanceof Integer; // Works fine
}
}

我的问题是为什么编译器拒绝第一个 b1 但允许第二个 b2

最佳答案

因为您已将 "abc" 转换为 Object,编译器将 ((Object) "abc") 视为与任何对象相同Object 类型的其他表达式。

因此,它认为它可以包含任何Object(或 null)。编译器不会深入检查表达式来确定更具体的类型。

您还可以写:

Object obj = "abc";
boolean b2 = obj instanceof Integer;

基本上是一样的。

它会阻止您编写 "abc"instanceof Integer 因为 StringInteger 都是类,并且它们不相关,因此 String 永远不可能是Integer 的实例。 (它允许 "abc"instanceof List,因为 List 是一个接口(interface),并且它不考虑类的最终性,并假设可能存在一个可以实现 ListString 子类)。

从某种意义上来说,强制转换就是告诉编译器你比它知道的更多。尽管编译器能够在非常基本的情况下进行反击,它可以确定您正在做一些无意义的事情,但它很大程度上会避开并信任您(以“随您的想法”的方式)。 p>

关于java - 需要有关 Instanceof 运算符中类型转换的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56425606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com