[英]What is the purpose and meaning of (char)i or (int)i in java?
从这个例子
FileInputStream fis=new FileInputStream("lalu.txt");
int i=0;
while(i=fis.read() !=-1){
System.out.println((char)i);
}
我问这个问题的目的是为什么这个char
用括号包在这里?
为什么这个字母用括号括起来?
哇,有些魔法发生在这里? 不,它在Java中很常见,称为显式类型转换 。
转换表达式在运行时将一个数字类型的值转换为另一个数字类型的类似值; 或者在编译时确认表达式的类型是boolean; 或者,在运行时检查引用值是指其类与指定引用类型兼容的对象。
括号和它们包含的类型有时称为强制转换运算符。
CastExpression:
( PrimitiveType ) UnaryExpression
( ReferenceType ) UnaryExpressionNotPlusMinus
当你将i
声明为int
并且你将它转换为char
(在括号中你写了char ),这意味着你正在缩小原始转换 。
根据§5.1.3:
将有符号整数缩小到整数类型T只会丢弃除n个最低位之外的所有位,其中n是用于表示类型T的位数。除了可能丢失有关数值大小的信息之外,这可能导致结果值的符号与输入值的符号不同。
默认情况下, int
数据类型是32位带符号的二进制补码整数, char
数据类型是单个16位Unicode字符( 此处引用),这意味着
因此,当您通过显式转换将整数缩小为字符时 ,您只需告诉编译器丢弃整数中的前两个字节并将i
视为字符!
让我们看一个例子:
int i = 0x41990041; // hex 41990041 is equivalent to decimal 1100546113
System.out.println("printing integer: " + i);
System.out.println("printing char representation of int: " +(char)i);
输出是:
打印整数:1100546113
打印char表示:A
在这里,我将随机4字节值取为整数i
。 仔细观察,当在运行时执行转换并且最后两个字节0041
作为字符打印时,前两个字节4199
被丢弃。 这里看到hex
值0041
的字符表示是A
首先,它们不是括号,而是括号。
括号在那里,因为这是编译器理解你将它投射到其他人的方式。 否则会抛出编译时错误。
括号中的类型名称,后跟变量(例如您的(char) i
)称为“类型转换”。 它告诉编译器“将此变量视为此类型而不是其变量类型”,即将i
读为字符而不是整数。 你必须以i
为整数开始,因为没有字符编号为-1
来显示何时到达文件末尾。 在与-1
比较之后,它可以被铸造(更改)为char
,因为这是变量真正代表的。 例如,如果你的文件的第一个字符是'N'
, i
将被设置为'N'
'的ASCII值,78。 (char) i
将78改回'N'
。 在这种情况下, System.out.println(i)
将打印78
而不是N
为简化起见,这称为类型转换。 它告诉编译器将变量读取为不同的类型。
希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.