Thinking In Java -- Chapter 3 -- 操作符

赋值:


  1. 基本类型存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值时,是直接将一个地方的内容复制到了另一个地方。比如,对基本数据类型使用a=b,那么b的内容就复制给了a,这样即使a中的内容发生修改,b也不会受到这种修改的影响。
  2. 但是对对象进行赋值的时候,情况却发生了变化。对一个对象进行操作时,我们真正操作的是对对象的引用。所以,倘若“将一个对象赋值给另一个对象”,实际是将“引用”从一个地方复制到另一个地方,这意味着倘若对对象使用 c=d,那么c和d都指向原本只有d指向的那个对象。

Random类的种子:


Random类在创建过程中,如果咩有传递任何参数,那么Java就会将当前时间作为随机数生成器的种子,并由此在程序的每一次执行时都产生不同的输出。而如果在创建Random对象时提供种子(用于随机数生成器的初始化值,随机数生成器对于特定的种子值总是产生相同的随机数序列),就可以在每一次执行程序时总是产生相同的随机数。什么场景下,我们需要在创建Random对象是提供种子呢,那就是为了是其输出是可验证的时候。因为此时随机数生成器产生的总是相同的随机数序列,那么就可以对输出进行验证。

关系操作符:


关系操作符== 和 != 适用于所有的基本数据类型。当用于对象的比较时,这两个操作符比较的是对象的引用,所以类似以下情况:
Integer n1 = new Integer(10);
Integer n2 = new Integer(10);
这个时候判断 n1 == n2 结果是false的,因为尽管两个对象的内容相同,但是二者的对象引用是不同的。那么如果我们想比较两个对象的实际内容是否相同应该怎么做呢?那就必须使用所有对象都适用的特殊方法equals(),但是这个方法不适用与基本数据类型,基本类型直接使用== 和 != 就可以。

这里需要注意一点,equal()方法的默认行为是比较引用的,之所以上面可以比较内容,是因为大多是Java类库都覆写了equal()方法,以便于用来比较对象的内容而不是对象的引用。请看下例:


在我自己定义的类中,并没有覆写equal()方法,所以默认比较的还是引用,所以输出结果依然是false。

类型转换操作符:


Java允许我们将任何基本类型转换成别的基本类型,但布尔型除外,布尔型根本不允许进行任何类型的转换。基础类型转换时,若是窄化转换,就有面临信息丢失的危险。此时,编译器会强制我们进行类型转换。如果是扩展转换,则不比显式的进行类型转换,因为不会造成信息的丢失。“类”数据类型不允许进行类型转换。将一种类转化成另一种,必须采用特殊的方法(对象可以在其所属类型的类族直接进行类型转换,例如,“橡树”可以转化成“树”;反之亦然。但不能把它转换成类族之外的类型)。

截尾和舍入:


在将float和double转型成整数值时,总是对该数字执行截尾(举例说明也就是无论是0.4,还是0.7都会变成0),如果想要得到舍入的结果(也就是0.4会 变成0,0.7会变成1),就需要使用到java.lang.Math中的round()方法。

提升:


  1. 通常,表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。如果float和double想乘,结果就是double。如果int和long相加,结果就是long。
  2. 类型比int小的(char,byte,short),在运算之前,这些值会自动转换成int。这样一来,最终得到的结果就是int类型。如果想把结果赋值给较小的类型,就必须使用类型转换,这样可能出现信息丢失。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值