Java 类型铸造的意义是什么?

Java 类型铸造的意义是什么?,java,casting,Java,Casting,在这段代码中: c = (char)(c - 'A' + 'a'); 为什么我们需要(char)?那是类型铸造,对吗 假设赋值语句右侧的c是大写字母。我想我们在做Unicode的加法和减法 这是我正在阅读的Java书籍中的片段: 当对字符进行算术运算时,首先将其转换为int 在Unicode系统中表示它的。从A中减去“A” 变量c本质上是问“大写字母有多远?” c?“中的字符加上“a”后,将得到相同的整数 将距离转换为小写字母序列编码。 需要对char进行强制转换,因为char是一种具有 更有

在这段代码中:

c = (char)(c - 'A' + 'a');
为什么我们需要
(char)
?那是类型铸造,对吗

假设赋值语句右侧的
c
是大写字母。我想我们在做Unicode的加法和减法

这是我正在阅读的Java书籍中的片段:

当对字符进行算术运算时,首先将其转换为int 在Unicode系统中表示它的。从A中减去“A” 变量c本质上是问“大写字母有多远?” c?“中的字符加上“a”后,将得到相同的整数 将距离转换为小写字母序列编码。 需要对char进行强制转换,因为char是一种具有 更有限的值范围。通过使用cast,程序员 承认他或她了解该项目的特殊性质 赋值,并希望值处于正确的范围0到 66535

我不明白
(char)
演员阵容的要点是什么?如果我们不使用
(char)
强制转换,会有什么不同?一般来说,什么是强制转换?

char
是Java中的一种类型,当您执行算术时,结果是一个
int
(部分地说,是数字运算符,它会产生一个
int
long
类型的值,并且添加了包括加法运算符
+
-

我得到

'A' = 65
'a' = 97
这是由于。引用JLS:

二进制
+
运算符应用于两个数字类型的操作数时执行加法,生成操作数之和

二进制
-
运算符执行减法运算,产生两个数值操作数之差

对操作数执行二进制数字提升(§5.6.2)

在本例中,数字升级是一个。引述:

加宽基元转换(§5.1.2)用于转换以下规则指定的一个或两个操作数:
……

  • 否则,两个操作数都将转换为类型
    int

因此,在您的示例中,转换为
char
是必要的,因为加法是在
int
值上执行的,因此结果也是
int
类型。要将其存储在
字符中,需要显式转换。

编程中要做的就是给变量赋值。这些变量可以是不同的类型。归根结底,一切都是以某种方式处理的数字,或者是作为一个“实体”处理的一系列数字。不同类型的变量可以占用不同的空间

如果您有两件事情以不同的方式处理并且占用了不同的空间,那么您需要一种定义良好的方式在这两件事情之间进行转换,这是通过强制转换和运算符来完成的。运算符接受多个输入并给出一个输出和-通常接受2个输入并返回1个

在您的例子中,您使用了一些运算符,这些运算符接受字符,将它们的位用作数字,并将结果数字返回int。然后您需要手动将该数字转换回字母,因为可能会丢失字节。此外,这里的显式转换可以防止程序员在处理数字时出错,并意外地将数字转换为字母,编译器会警告他们。最后,所有这些都归结为规范,规范准确地声明了每个输入类型和每个运算符的情况

大多数情况下,转换都是为了提供一种直观、简单的转换类型的方法,如果有这种方法的话。大多数情况下,这是通过数字完成的,因为唯一的区别是提供的比特量(字节、短、int、长),有时是内部计算(浮点、双精度)。在这些情况下,切割和舍入很容易,通过强制转换为字节数较少的类型或整数表示来实现,而向小数点添加字节或更改表示则通过强制转换为字节数较多的类型或浮点表示的类型来实现


另一方面,有时您希望将一个对象视为更一般的情况,并将其强制转换为祖先类型(也称为超级类型等)。例如,当您对对象进行排序时,您可能不关心编写排序算法时所处理的确切类型。

%标记一个变量,c表示字符,d表示十进制,n表示换行符,变量的顺序与字符串中的顺序相同,最后作为参数提供。对于可以以格式执行的操作列表,您可以看到在%和变量类型之间也可以使用标志,例如,
%10d
将格式化一个数字,使其占用10个字符(用空格或0填充),因此如果我在+的任一侧为字符类型时执行+,它的结果是int类型的值?简单地说:在java中,数字8可以作为字符而不是整数。。。。所以8+8可能是88而不是16。。。由于8应被视为算术运算的整数,因此我们将caste键入为
int
'A' = 65
'a' = 97