【Java语言的26个细节】涵盖了Java编程中的一些易被忽视或误解的要点,以下是对其中几个细节的详细说明: 1. **位移运算越界处理**:Java中的位移运算符`<<`和`>>`在处理整型数据时,会进行优化。对于左移运算`a<<b`,当b超过32(对于int类型)时,实际移位数为`b % 32`。因此,`a<<33`相当于`a<<1`,因为33对32取模等于1。所以,`int a=5; System.out.println(a<<33);`的结果是10,而不是预期的0。 2. **NaN(非数字)的不等性**:在Java中,根据IEEE 754浮点数标准,`0.0/0.0`会产生NaN,它代表一个非数字值。NaN不等于任何值,包括它自身,因此`double i=0.0/0.0; if(i==i)`将会输出"No i!=i"。在进行浮点数比较时,需要特别注意这一点。 3. **equals方法的覆盖**:在Java中,重写`equals`方法时,应遵循Java规范的五个原则:反射性、对称性、传递性、一致性以及非空性。在自定义类中,尤其是包含引用类型的成员变量时,正确的`equals`实现应该检查这些引用是否指向相同对象,例如: ```java public boolean equals(Object obj){ if(obj instanceof Student){ Student s=(Student)obj; return s.name.equals(this.name) && s.age==this.age; } } ``` 这样确保了比较的正确性,避免因类型不匹配导致的问题。 4. **浅复制与深复制**:在Java中,复制对象有两种方式,浅复制和深复制。 - **浅复制**:只复制对象本身,但引用的对象不会被复制,它们仍然是原始对象的引用。如果对象内部有引用类型的属性,浅复制只会复制引用,不会复制引用的对象。 - **深复制**:不仅复制对象本身,还会递归复制它引用的对象,形成一个新的独立的对象树。在Java中,实现深复制通常需要实现`Cloneable`接口,并重写`clone`方法。例如: ```java @Override public Student clone() { try { return (Student) super.clone(); } catch (CloneNotSupportedException e) { throw new RuntimeException(e); } } ``` 注意,`super.clone()`会返回一个浅复制的新对象,但为了实现深复制,可能还需要额外的代码来处理引用类型的属性。 以上仅是Java语言26个细节的部分内容,每个细节都揭示了Java编程中的微妙之处,理解和掌握这些细节可以提高代码质量,避免潜在的问题。在实际开发中,应重视这些细节,以编写出更健壮、可维护的Java程序。
- 粉丝: 5
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助