我读了一本书,里面有一句话:
byte rounds = 12, fighters = (byte) 2;
它说
字节原语有一个四字节有符号整数作为其有效文本。如果未执行显式转换,则整数将隐式转换为一个字节。
根据甲骨文文档,一个字节本质上不应该是一个字节吗?
字节是一个字节。但是字面意义上的12是整数类型的,也就是4个字节。这句话说的是,当您编写byte回合=12
时,存在一个隐式强制转换来将整数12转换成字节。
如果不执行显式转换,则将整数隐式转换为一个字节。
如果一本书这么说,那是不正确的。或者至少,它没有讲述整个故事。
(从技术上讲,这些是转换而不是强制转换。强制转换涉及Java(
隐式缩小转换的整个过程如下:
它们只适用于作业环境;见JLS 5.2
它们仅在被转换的值是(编译时)常量表达式时适用;见JLS 15.28
它们仅在值类型为byte
、char
、short
或int
时适用 - 它们仅在目标类型为
byte
、char
或short
或相应的包装类型(byte
、Character
和short
)时适用
- 仅当值“适合”目标类型而不截断时,它们才适用
例如:
byte b = -1; // OK
Byte b1 = -1; // OK
byte b2 = 255 // Error: value is not in range of 'byte'
byte b3 = 1 + 1; // OK
byte b4 = b + 1; // Error: not a constant expression
public void test (byte b) {...}
test(byte(12)); // OK: explicit narrowing conversion
test(12); // Error: not an assignment context.
总之,只有当编译器能够确定它永远不会导致任何信息丢失时,才允许这种转换。
例如,Java为初始化基本数据类型提供了特殊的文本
int a = 1234;
double b = 12.34;
float c = 56.78f;
char d = 'x';
留档表示byte
类型没有特殊的文字。相反,基元类型byte
与int
共享其文字。当有符号的32位int
文字"适合"到单个字节时,Java将执行隐式转换;否则,它将产生编译时错误。
强制类型转换:将一个数据类型强制转换为其他的数据类型。 类型转换主要指,将其他的数据类型,转换为:String、Number、Boolean。你会把某个数据类型转换成 null 或者 undefined 吗?不会,因为这样做,没有意义。 其他的简单类型 --> String 方法一:变量 + "" 或者 变量 + "abc" 举例如下: var a = 123; // Number 类型 co
问题内容: 如果我执行以下操作 因为0是使用32位的整数文字,而d是使用64位的双精度变量,那么剩余的32位会被随机垃圾填充,还是Java正确地提升了文字? 问题答案: Java正确地将其提升,否则会有相当多的代码是有问题的:-) Java语言规范的5.1.2节详细介绍了这一点: 以下19个特定于原始类型的特定转换称为扩展原始转换: 扩展原始转换不会丢失有关数值总体大小的信息。确实,从整数类型到另
问题内容: 字符串是不可变的,这是否意味着我总是必须通过将字符串传递给方法来做类似的事情? 或者是 精细?我尝试了第二个,它没有给我任何错误,为什么? 问题答案: 字符串是不可变的 是的,您自己承认。不可变 对象 是不允许其状态更改的对象。这包括对象。 然后: 创建一个 新 的小写字母字符串, 并且不使用result 。在这种情况下,这很可能是一个“错误”,因为它仍然评估原始字符串对象(由于它是不
问题内容: 我有一个代码段: 为什么不自动类型转换为while ? 问题答案: 因为是,并且具有更大的范围。因此,将其分配给可能会导致数据丢失。 是一个常数,而编译时间保证在的范围内。
谢谢你的帮助。
我需要以十六进制表示形式将字符串转换为字节数组。例如: 值:06000002我需要的是: 如何做到这一点?