thinking in java 第三章笔记

来源:互联网 发布:拍大师软件下载 编辑:程序博客网 时间:2024/05/16 08:37

1.对于主数据类型的赋值是非常直接的。由于主数据类型容纳了实际的值,而且并非指向一个对象的句柄,所以在为其赋值的时候,可将来自一个地方的内容赋值到另一个地方。


2.对一个对象赋值时,我们真正操作的是它的句柄。若 从一个对象到另一个对象 赋值,实际上是将句柄从一个地方复制带另一个地方。这意味着假若为对象使用"C=D",那么C和D最终都会指向最初只有D才指向的那个对象。


3.检查对象是否相等。==和!=适用于所有对象,比较的是对象的句柄。例如Integer n1 = new Integer(47); Integer n2 = new Integer(47); System.out.println(n1==n2);输出false。因为两对象的句柄不同。若想比较两个对象的实际内容是否相同,应该使用所有对象都使用的equals()方法,不适用于主数据类型,那些主数据类型直接使用==和!=即可。

System.out.println(n1.equals(n2));输出true。如果自己创建类例如

class Value {        int  i;}public class Equals {  public static void main(String[] args){  Value v1 = new Value();   Value v2=new Value();   v1.i=v2.i=10;   System.out.println(v1.equals(v2)); //false }} 
equals()的默认行为是比较句柄,除非在自己的新类中改变了equals(),否则不可能表项出我们希望的行为。大多数Java类库都实现了equals(),所以实际比较的是对象的内容,而非它们的句柄。


4.与C及C++不同,不可将一个非布尔值当做布尔值在逻辑表达式中使用。

5.java添加了一种“无符号”右移(>>>),无论正负,都在高位添0。若对char,byte和short进行移位处理,那么在进行移位之前,它们会自动转换为一个int。


6.while(x=y){}  在java中这个表达式的结果并不是布尔值,而编译器期望的是一个布尔值,而且不会从一个int数值中转换得来。所以在编译时,系统就会提示出现错误。

7.将float或double值造型成整数值后,总是将小数部分"砍掉",不做任何进位处理。

8.Math.random()产生的范围是[0,1)

0 0