lmstack

导航

初读"Thinking in Java"读书笔记之第三章 --- 操作符

  1. 更简单的打印语句
    • 导入自己编写的静态类库,即可使用print();打印
  2. 使用Java操作符
    • 操作符:+,-,*,/,=,==,!=,+=,?:,%等
    • 几乎所有操作符都只能操作“基本类型”,但是=,==,!=例外
    • String类支持+和+=+的作用是将字符串拼接,同时若需要进行类型转换时,会将非String类转换成String类。
  3. 优先级
    • 先乘除后加减
    • 其余处应使用括号明确指出优先级。
  4. 赋值
    • =为赋值操作符。
    • 左值必须是一个明确的,已命名的变量,用来保证有一个物理空间能保存右值。
    • 右值可以是任何常数,变量或者表达式。
    • 常数不能作为左值。
    • 基本数据类型的赋值,仅仅是复制存储的内容。
    • 引用类型的赋值,则是将对象的地址复制给了新的变量,新旧变量将操控相同的对象。该现象称为"别名现象"
    • 形式参数为引用类型的方法在调用时同样会出现别名现象,该方法将会修改方法之外的对象。
  5. 算术操作符
    • 一元-用于转变数据的符号,一元+用于将较小类型操作数提升为int
  6. 自动递增和递减
    • ++a,--a前缀式,先执行递增或递减运算,然后生成值。
    • a++,a--后缀式,先生成值,在进行递增或递减运算。
    • 递增和递减操作符是唯一具有"副作用"的操作符。他们不仅使用变量的值,还会改变变量的值。
  7. 关系操作符
    • >,>=,<,<=,==,!=,返回布尔型的值。
    • 非基本数据类型,直接采用==时,比较的是两个对象的引用是否相同。
    • 若要比较两个对象的实际内容是否相同,需要采用引用.equals()方法。而且自定义的类,需要重写equals()方法。
  8. 逻辑操作符
    • &&,||,!,操作数为布尔型的值,返回值也为布尔型。
    • 与C不同,Java中不可将非布尔类型的值用在逻辑表达式中。
    • 短路现象
      • 当使用逻辑操作符时,一旦能够确定表达式的值,剩余部分便不再继续计算。
      • 逻辑表达式靠后的运算有可能不被执行。
      • 这种机制可以提升性能。
  9. 直接常量
    • 直接常量在编译时有时不能确定类型,需要用某些字符指明
    • 0x***,0X***代表16进制。
    • 0***代表八进制。
    • ***L,***l代表long。
    • ***F,***f代表float。
    • 当表示的值超出了类型范围时,编译器会报告错误。
    • 使用包装类. toBinaryString()方法,可以将数据转换成二进制。
    • 如果编译器能够正确识别类型,就不必在数值后附加字符。
  10. 按位操作符
    • &,|,~,^,^=,&=,|=,按位对两个操作数进行操作。
    • 按位操作符具有与逻辑操作符相同的效果,但是不会中途短路。
    • 布尔型数据可以作为单比特值对待,但是对布尔型数据不能执行按位非操作。
  11. 移位操作符
    • <<,>>,>>>,<<=,>>=,>>>=只能用来处理整形数据类型
    • 左移位操作符可以将操作数向左移动,低位补0。
    • 右移位操作符可以将操作数向右移动; 若符号为正,则高位补0; 若符号为负,则高位补1。
    • >>>为"无符号"右移位操作符,无论正负,都在高位补0。
    • 如果对char, byte,short类型的数进行移位处理,在移位之前会转成int类型,并且结果也是int类型的数。
    • <<=,>>-,>>>=可以将左边的值移动由右边的值指定的位数,再将结果赋给左边的变量。
    • 对byte或short值进行上述移位运算时,最后赋值时会导致截断,得到错误的结果。
  12. 三元操作符
    • 布尔表达式 ? 表达式0:表达式1。判断布尔表达式的值,若为true,则运算表达式0,并返回其值;若为false,则计算表达式1,并返回其值。
  13. 字符串操作符+和+=
    • 如果表达式以一个字符串起头,那么后续所有的操作数都必须是字符串类型。
  14. 使用操作符时常犯的错误
    • while(x=y)是C里面常见的错误,但Java中会检查括号内运算结构是否是布尔值;同时Java不会自动将int转换成布尔值,因此除非x和y都是布尔值,否则该错误会被编译器报告。
  15. 类型转换操作符
    • 可以对数值或者变量进行强制类型转换。
    • 窄化转换:将数据类型由大向小转换,可能面临信息丢失的危险,必须显式地进行转换。
    • 扩展转换:将数据类型由小向大转换,不会丢失任何信息,不必显示地进行转换。
    • 布尔型数据不允许进行任何类型的转换。
    • 除布尔型外,其他任何基本数据类型之间都可相互转换。
    • 类数据类型不允许进行类型转换。
    • 窄化转换中,不会进行四舍五入操作,若要四舍五入,需要采用Math类中的round()方法。
    • 在执行算术运算或按位运算时,只要比int小的数,都会自动转成int类型,并且结果也是int类型。
    • 通常,表达式中出现的最大数据类型决定了表达式最终结果的数据类型。
  16. Java没有sizeof
    • Java语言的数据类型占的空间在所有机器中都是相同的,因此不需要通过sizeof来获得数据字节数,方便移植。
  17. 操作符小结
    • 布尔型数据只能进行true,false的赋值及测试运算,不能进行加减等其他任何运算。
    • char,byte,short在算术运算时会被数据提升为int,必须将其显示地强制转换回原来的数据类型。
    • char,byte,short在进行复合赋值运算(+=)时,不需要显示地类型转换

posted on 2018-01-12 11:11  lmstack  阅读(102)  评论(0编辑  收藏  举报