Kotlin中val bytes = 0b00000001_00000000_00000000_00000000的编译求值问题
关于Kotlin二进制字面量的类型与值问题解答
实际类型与输出值
- 代码
val bytes = 0b00000001_00000000_00000000_00000000中的下划线仅作为数字可读性分隔符,不会改变字面量的本质。这个32位二进制数的十进制值为16777216,由于其落在KotlinInt类型的取值范围内(-2¹⁰⁷³⁷⁴¹⁸²⁴到2¹⁰⁷³⁷⁴¹⁸²³),编译器会自动推断其类型为Int,这就是你打印时得到16777216且类型为Int的原因。
ChatGPT回答错误的原因
ChatGPT混淆了二进制字面量与字节数组的声明逻辑。在Kotlin中,二进制字面量默认会被推断为对应大小的数值类型(如Int、Long),而非字节数组。若要创建对应值的Byte数组,需要显式声明:
// 直接创建Byte数组 val byteArray = byteArrayOf(0x01, 0x00, 0x00, 0x00) // 从Int值转换为Byte数组 val intValue = 0b00000001_00000000_00000000_00000000 val convertedByteArray = intValue.toByteArray()
无法迭代的原因
Int并非可迭代类型,本身没有iterator()方法。只有数组、集合等实现了Iterable接口的类型才能被迭代,所以你尝试迭代Int类型的变量会触发报错。
内容的提问来源于stack exchange,提问作者varun sethi
相关产品推荐
相关产品推荐

