美文网首页
Java语法笔记

Java语法笔记

作者: 环球探测 | 来源:发表于2016-03-18 15:24 被阅读75次

    1. StringBuffer和StringBuilder

    StringBuffer 执行效率低,线程安全
    StringBuilder效率高,但是非线程安全

    2.Math

    Math.floor(f) 向下取整
    Math.round(f) 四舍五入,实现:加上0.5后向下取整

    3.hashCode 和 31

    String的hashCode源码:
    Java
    public int hashCode() {
    int h = hash;
    if (h == 0 && value. length > 0) {
    char val[] = value;

        for ( int i = 0; i < value. length; i++) {  
            h = 31 * h + val[i];  
        }  
        hash = h;  
    }  
    return h;  
    

    }

    其实等价于 ```s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]```    
    使用31的原因是它是素数。31可以 由i*31== (i<<5)-1来表示,现在很多虚拟机里面都有将该乘法换成位移计算的相关优化。
    
    ##4.反射
    在**运行时**状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
    当一个类被加载以后,Java虚拟机就会自动产生一个Class对象。通过这个Class对象我们就能获得加载到虚拟机当中这个Class对象对应的方法、成员以及构造方法的声明和定义等信息。
    获取Class对象的三种方式:
    1. 通过实例对象的getClass方法获取
    2. 通过Class.forName载入类
    3. 通过类名的.class属性获取
    
    ##5. 数组初始化
    ```Java```
    int[] a = new int[length];
    int[] a = {1,3,6};
    

    6. obj.equals() 方法

    如果我们的类没有覆盖 equals方法,那么该类实例调用.equals的效果和“==”操作符相同,因为源码如此
    Java
    //Object类的equals方法
    public boolean equals(Object obj) {
    return (this == obj);
    }

    如果想要比较两个对象的内容,要重写equals()方法才可。Java jdk中的容器类和String都已经覆盖了equals方法。
    
    ##7.obj.clone()方法
    深拷贝与浅拷贝的区别:
    
    ![Paste_Image.png](https://img.haomeiwen.com/i1713176/c9ca35587dbef1b0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    Object的clone方法是“浅拷贝”。如果我们要彻底实现深拷贝,必须覆盖clone方法,在其中为我们的新对象的所有引用类型的属性层层赋值,一直到非引用类型为止。

    相关文章

      网友评论

          本文标题:Java语法笔记

          本文链接:https://www.haomeiwen.com/subject/flthlttx.html