《Java编程思想》ch3.操作符

操作符

在最底层,Java中的数据是通过使用操作符来操作的。

3.1更简单的打印语句

静态导入:从类中导入静态成员,允许它们在没有类引用的情况下使用

3.2使用Java操作符

操作符作用于操作数,生成一个新值。
几乎所有的操作符只能操作基本类型,例外的是“=”、“==”、“!=”,这些操作符能操作所有的对象。除此以外,String类支持“+”和“+=”。

3.3优先级

优先级决定了各部分的计算顺序
参考:java操作符优先级

3.4赋值

基本类型值复制,对象类型引用复制(对象赋值两个变量将指向相同的对象,这种现象称为“别名现象”)。

3.5算术操作符

有+ - * /
其中,整数除法会直接去掉结果的小数位,而不是四舍五入地圆整结果。

3.6自动递增和递减

递增操作符++
递减操作符--
分前置和后置

3.7关系操作符

关系操作符生成的是一个boolean布尔结果,它们计算的是操作数的值之间的关系。
ps.测试对象的等价性:“==”和“!=”适用于所有对象,当操作数是对象类型时,“==”比较的是对象的引用,而不是对象的内容。
对象的被覆盖的equals()方法比较的是实际内容。注意,equals()的默认行为是比较引用,所以除非在自己的新类中覆盖equals方法,否则它比较的还是引用。

3.8逻辑操作符

与&& 或|| 非!
注:不可将一个非布尔值当作布尔值在逻辑表达式中使用。
逻辑操作符的“短路”现象:一旦能够明确无误地确定整个表达式的值,就不再计算表达式余下部分了。

3.9直接常量

示例:

int n = 0x2f;
long m = 100L;

3.10按位操作符

对于布尔值,按位操作符具有与逻辑操作符相同的结果,只是它们不会中途短路。

3.11移位操作符

左移: <<
"有符号"右移: >>
"无符号"右移:>>>
如果对char byte short类型的数值进行移位处理,那么在移位进行之前,它们会被转化为int类型,并且得到的结果也是int类型的值。
如果对byte short值进行 >>>=这样的移位运算,得到的可能不是正确的结果。它们会先被转换成int类型,再进行右移操作,然后被截断,赋值给原来的类型,在这种情况下可能得到-1的结果。

3.12三元操作符

boolean-exp ? value0 : value1
相对于if-else语句,三元操作符更加简洁,但是可读性较差。

3.13字符串操作符+和+=

用途:连接不同的字符串

3.14使用操作符时常犯的错误

while(x=y){
    //...
}

Java编译器会报错,防止这个错误发生。因为它不允许我们随便把一种类型当作另一种类型来用。

3.15类型转换操作符

要想执行类型转换,需要将希望得到的数据类型置于圆括号内,放在要进行类型转换的值的左边。
如:

int i = 5;
long lng = (long) i;

Java允许我们把任何基本数据类型转换成别的基本数据类型,但布尔型除外,后者根本不允许进行任何类型的转换处理。
ps.在执行窄化转换时,必须注意截尾与舍入问题。在将float或double转型为整型值时,总是对该数字执行截尾。如果想要得到舍入的结果,就需要使用java.lang.Math中的round()方法。
如果对基本数据类型执行算术运算或按位运算,只要类型比int小(char short或者byte),那么在运算之前,这些值会自动转换为int。

3.16Java没有Sizeof

Java所有数据类型在所有机器中的大小都是相同的,Java不需要sizeof()操作符来满足移植这方面的需要。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容