易截截图软件、单文件、免安装、纯绿色、仅160KB

Java语言的26个细节


Java语言的26个细节[转载]
Java作为一门优秀的面向对象的程序设计语言,正在被越来越多的人使用。本文试图列出作者在实际开发中碰到的一些Java语言的容易被人忽视的细节,希望能给正在学习Java语言的人有所帮助。
1,位移运算越界怎么处理
    考察下面的代码输出结果是多少?
    int a=5;
    System.out.println(a<<33);
按照常理推测,把a左移33位应该将a的所有有效位都移出去了,那剩下的都是零啊,所以输出结果应该是0才对啊,可是执行后发现输出结果是10,为什么呢?因为Java语言对位移运算作了优化处理,Java语言对a<<b转化为a<<(b%32)来处理,所以当要移位的位数b超过32时,实际上移位的位数是b%32的值,那么上面的代码中a<<33相当于a<<1,所以输出结果是10。
2,可以让i!=i吗?
当你看到这个命题的时候一定会以为我疯了,或者Java语言疯了。这看起来是绝对不可能的,一个数怎么可能不等于它自己呢?或许就真的是Java语言疯了,不信看下面的代码输出什么?
  double i=0.0/0.0;
  if(i==i){
      System.out.println("Yes i==i");
  }else{
      System.out.println("No i!=i");
  }
上面的代码输出"No i!=i",为什么会这样呢?关键在0.0/0.0这个值,在IEEE 754浮点算术规则里保留了一个特殊的值用来表示一个不是数字的数量。这个值就是NaN("Not a Number"的缩写),对于所有没有良好定义的浮点计算都将得到这个值,比如:0.0/0.0;其实我们还可以直接使用Double.NaN来得到这个值。在IEEE 754规范里面规定NaN不等于任何值,包括它自己。所以就有了i!=i的代码。
3,怎样的equals才安全?
    我们都知道在Java规范里定义了equals方法覆盖的5大原则:reflexive(反身性),symmetric(对称性),transitive(传递性),consistent(一致性),non-null(非空性)。那么考察下面的代码:
public class Student{
    private String name;
    private int age;
    public Student(String name,int age){
        this.name=name;
        this.age=age;
    }
    public boolean equals(Object obj){
       


相关文档:

JAVA 获取本周的起始日期 troy

import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
/**
 * @author troy(J2EE)
 * @version 1.0
 */
public class Test {
 public static void main(String[] args) throws Exception {
  DateFormat df = DateFormat.getDateInstance();
 &n ......

java接口与抽象类的区别

一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体的业务实现了。当你需要再开发另一个相近的项目时,你以前的抽象层说不定还可以再次利用 呢,面对对象的设计 ......

JAVA常用操作语句 项目中的总结三


获得mysql和oracle链接的类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectDB {
private static final String MYSQL = "jdbc:mysql://";
private static final String ORACLE = "jdbc:oracle:thin:@";
private ConnectD ......

java 的版本异常

学习之路总是并不平坦的,这不,一开始就遇到问题了:Bad version number in .class file。版本不对?可是我用的java以及javac都是JDK5呀,怎么回事?除了编译版本跟运行版本不一致外是不会出现这种可能的。突然想起前几天试了一下JDK6,把Eclipse的JDK编译器选成JDK6了。果然,将其改回去JDK5就行了。
================== ......

java面试问题集锦

        我们为什么要去面试 ? 面试的目的是什么 ?
        面试要解决哪几个问题 ?
 
一、面试的目的
二、面试前的准备
三、面试常见问题解答
      A、项目经理常见问题
     B ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号