gpt4 book ai didi

java - 有没有办法检查 instanceof 原语变量 java

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:39 25 4
gpt4 key购买 nike

我们可以知道对象引用是一个使用instanceof操作符的测试。但是有没有运算符来检查原始类型。例如:

byte b = 10;

现在如果我只考虑值 10。有什么方法可以让我发现它被声明为一个字节吗?

最佳答案

局部变量

假设您的意思是局部变量,只要作为对象传递,原语将始终自动被其包装类型包装,在本例中为 java.lang.Byte。不可能使用反射来引用局部变量,因此您无法区分 Byte 和 byte 或 Integer 和 int 等。

Object bytePrimitive = (byte) 10;

System.out.println("is a Byte ? " + (bytePrimitive instanceof Byte));
System.out.println("Check class = " + (bytePrimitive.getClass()));

// false because class in this case becomes Byte, not byte.
System.out.println("Primitive = " + (bytePrimitive .getClass().isPrimitive()));

字段

但是,如果您谈论的是类中的字段,那么事情就不同了,因为您可以获取实际声明类型的句柄。然后您可以按预期使用 java.lang.Class.isPrimitive() 并且类型将为 byte.class。

public class PrimitiveMadness {
static byte bytePrimitiveField;
static Byte byteWrapperField;

public static void main(String[] args) throws Exception {
System.out.println("Field type = " + PrimitiveMadness.class.getDeclaredField("bytePrimitiveField").getType());
System.out.println("Is a byte = " + (PrimitiveMadness.class.getDeclaredField("bytePrimitiveField").getType() == byte.class));
System.out.println("Is a primitive? = " + PrimitiveMadness.class.getDeclaredField("bytePrimitiveField").getType().isPrimitive());
System.out.println("Wrapper field = " + PrimitiveMadness.class.getDeclaredField("byteWrapperField").getType());
}

}

关于java - 有没有办法检查 instanceof 原语变量 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27400919/

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