【Thinking_in_Java学习笔记】第三章 操作符

阅前说明:本系列笔记仅记录读书过程中本人不会或不熟的知识点。

第3章 操作符、

3.2 使用Java操作符

  • “=”、“==”、“!=”这些操作符可以操作所有对象;
  • 其他几乎所有的操作符只能操作“基本类型”。
  • String类型支持“+”和“+=”,代表字符串拼接。

3.3 优先级

  • 即便Java中对各操作符的优先级有明确规定,但是我们要保持优良的编码习惯,即用小括号来标明计算顺序
  • 对于String,“+”意味着字符串连接,如果必要,还要执行字符串转换

字符串转换:

  • 当编译器观察到一个String后面跟着一个“+”,而这个“+”后面跟着一个非String类型的元素时,就会尝试着将这个非String类型好的元素转化为String(如果这个元素是一个对象,则执行这个对象的toString()方法)。例如:

    //字符串拼接
    System.out.println("hello "+"world!");
    /*
        output:
            hello world!
    */
    //字符串转化(user.toString()-->name:chaofan)
    System.out.println("hello:"+uer);
    /*
        output:
            hello:name:chaofan
    */
    

3.4 赋值

  • 如果一个对象被引用,那么说明这个对象还有用。
  • 如果一个对象没有了引用,那么这个对象会被“垃圾回收器”(GC)自动清理掉。

3.5 算术操作符

  • 整数除法会直接去掉结果的小数位,而不会对结果四舍五入。
  • Random类的对象可以生成随机数序列(计算机没有随机),构造器传入的参数叫做种子(seed),传入不同的种子会生成不同的随机数序列,通过该对象的nextInt()系列的方法来一个一个数字地取用,nextInt()方法也可以传入一个参数,代表取出随机数的范围,下面代码中的100就代表,要取范围为0-100(不含100)的序列中的下一个数字。如果种子一致,范围一致,那么Random的生成的随机数序列也会一致。
Random rand = new Random(47);
for(int i = 0;i < 10;i++){
    System.out.print(rand.nextInt(100)+",");
}
/*
    output:
        58,55,93,61,61,29,68,0,22,7,
*/

3.5.1 一元加、减操作符

  • 实际上就是广义上的正负号,它们的作用有两个:

    1. 标明数字的正负性;
    2. 将比int小的类型操作数提升为int类型。

3.8 逻辑操作符

“与”(||)、“或”(&&)、“非”(!)不能运用于非boolean表达式(表达式结果不为boolean类型胡或者非boolean类型的数据类型)。

3.8.1 短路

短路机制如果合理运用,那么就可以使逻辑表达式有一部分不必计算,那将获得潜在的性能提升。

3.9 直接常量

后缀

  • 大写(或小写)的L,代表long。(一般大写)
  • 大写(或小写)的F,代表float。
  • 大写(或小写)的D,代表double。

前缀

  • 0x(0X)后跟随0-9的数字或小(大)写的a-f的字母,代表十六进制数字。
  • 0后跟随0-7的数字,代表八进制数字。

3.9.1 指数记数法

float f4 = 1e-43f;

编译器通常会将指数当作double处理,所以后面要尾随f,不然编译器会报错。

3.10 按位操作符

与:&
或:|
异或:^
非:~

  • 按位操作符只能操作整数类型;
  • 按位操作符可以与等号连用(~除外):&=等;
  • 布尔类型不能按位“非”运算,为了和逻辑NOT区分(大概)。

3.11 移位操作符

  • 移位操作符只能操作整数类型

左移位操作符(<<),向左按位移位,低位补0;
右移位操作符(>>),向右按位移位,高位补符号位。

另外,还有一种**“无符号”右移位操作符(>>>)**,无论正负,高位均补0。

  • 对char、byte、short类型进行移位处理时,它们会先转化为int类型,并且移位结果也是int类型。

3.15 类型转化操作符

窄化转换:信息可能丢失,显式地强制转换。
扩展转换:信息不会丢失,无需显式转换。

  • Java允许将任何基本数据类型转化为别的基本数据类型。
  • 布尔类型不允许进行数据转换。
  • “类”类型不允许进行数据转换。
  • 对象只能在其所属泪珠之间进行类型转换。

3.15.1 截尾和舍入

  • 将float或double转型为整数值时,总是截尾(二进制层面)。
  • 如果想要进行数学意义上的四舍五入,那么需要使用java.lang.Math中的round()方法。

3.15.2 提升

如果对基本数据类型执行算数运算或者按位运算,如果比int小(即char、byte或short):

  • 自动转换成int,再进行运算。
  • 结果为int。

!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值