操作符的理解七

1、字符串操作符+和+=

这个操作符在Java中有一项特殊用途:连接不同的字符串。
操作符重载机制。
字符串操作符有一些很有趣的行为。如果表达式以一个字符串起头,那么后续所有操作数都必须是字符串型(请记住,编译器会把双引号内的字符序列自动转成字符串)。
2、使用操作符时常犯的错误
使用操作符时一个常犯的错误就是,即使对表达式如何计算有点不确定,也不愿意使用括号。
Java中有一个和C与C++中类似的问题,即使用按位“与”和按位“或”代替逻辑“与”和逻辑”或“。按位“与”和按位“或”使用单字符(&或|),而逻辑“与”和逻辑”或“使用双字符(&&或||)。就像”=“和”==“一样,键入一个字符当然要比键入两个简单。Java编译器可防止这个错误发生,因为它不允许我们随便把一种类型当作另一种类型来用。
3、类型转换操作符
类型转换(cast)的原意是”模型铸造“。在适当的时候,Java会将一种数据类型自动转换成另一种。例如,假设我们为某浮点变量赋以一个整数值,编译器会将int自动转换成float。类型转换运算允许我们显式的进行这种类型的转换,或者在不能自动进行转换的时候强制进行类型转换。
要想执行类型转换,需要将希望得到的数据类型置于圆括号内,放在要进行类型转换的值的左边。
在Java中,类型转换是一种比较安全的操作。然而,如果要执行一种名为窄化转换(narrowing conversion)操作(也就是说,将能容纳更多信息的数据类型转换成无法容纳那么多信息的类型),就有可能面临信息丢失的危险。此时,编译器会强制我们进行类型转换,这实际上是说:‘这可能是一件危险的事情,如果无论如何要这么做,必须显式的进行类型转换。“而对于扩展转换(widening conversion),则不必显式的进行类型转换,因为新类型肯定能容纳原来类型的信息,不会造成任何信息的丢失。
Java允许我们把任何基本数据类型转换成别的基本数据类型,但布尔型除外,后者根本不允许进行任何类型的转换处理。”类“数据类型不允许进行类型转换。
一、截尾和舍入
在执行窄化转换时,必须注意截尾和舍入的问题。
在将float或double转型为整型值时,总是对该数字执行截尾。如果想要得到舍入的结果,就需要使用java.lang.Math中的round()方法。
Math.round(值);由于round()是java.lang的一部分,因此在使用它时不需要额外的导入。
例如:(int)0.7 = 0 ;    Math.round(0.7)  =  1;    Math.round(0.4f)  =  1;
二、提升
如果对基本数据类型执行算术运算或按位运算,大家会发现,只要类型比int小(即char、byte或者short),那么在运算之前,这些值会自动转换成int。这样一来,最终生成的结果就是int类型。如果想把结果赋值给较小的类型,就必须使用类型转换(既然把结果赋给了较小的类型,就可能出现信息丢失)。通常,表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。如果将一个float值与一个double值相乘,结果就是double;如果将一个int和一个long值相加,则结果为long。
4、Java没有sizeof
在C和C++中,sizeof()操作符可以告诉你为数据项分配的字节数。在C和C++中,需要使用sizeof()的最大原因是为了“移植”。不同的数据类型在不同的机器上可能有不同的大小,所以在进行一些与存储空间有关的运算时,程序员必须获悉那些类型具体有多大。
Java不需要sizeof()操作符来满足这方面的需要,因为所有数据类型在所有机器中的大小都是相同的。

 

posted @ 2019-03-05 15:41  止水于石  阅读(88)  评论(0)    收藏  举报