java源码

    xiaoxiao2021-03-25  177

    一、Integer,String 1) == 和 equals的用法 == 比较的是地址,equals比较的是内容    public static void main(String args[]){     Integer s1 = new Integer(5);     Integer s2 = new Integer(5);     System.out.println(s1==s2); //false     System.out.println(s1.equals(s2)); //true     Integer s3 = 5;     Integer s4 = 5;          System.out.println(s3==s4); //true     System.out.println(s3.equals(s4)); //true     //为什么s3==s4 因为Integer有一个缓存机制(-128-127)数字在这个范围,是直接被缓存进去的,以     //指向的地址是相同的     String st1="hello";     String st2="hello";         System.out.println(st1==st2);//true          //为什么st1==st2,因为String有一个pool机制,也就是说,首先会去缓存中找这个‘hello’,如果没     //有就加入到缓存中,有则直接取出,所以st2会直接取出st1的地址值    } 2、arrayList    arrayList的删除方法解读    String aa[]={"1","2","3","4"};     int size = aa.length;    int numMoved = size - 0 - 1;    if (numMoved > 0)    System.arraycopy(aa,1, aa, 0, numMoved);    aa[--size] = null;    for(String a : aa){      System.out.println(a);    }    删除数组的第一个元素,下标为0 3、arrays的并归算法   public class ZZ { public int[] sort(int[] arrs){ if(arrs.length < 2){ return arrs; } int middle = arrs.length % 2 == 0 ? arrs.length >>> 1 : (arrs.length - 1) >>> 1; int[] left = Arrays.copyOfRange(arrs, 0, middle); int[] right = Arrays.copyOfRange(arrs, middle, arrs.length); int[] lres = sort(left); int[] rres = sort(right); return merge(lres, rres); }   private int[] merge(int[] lres, int[] rres) { int[]  res = new int[lres.length + rres.length]; int l = 0; int r = 0; int c = 0; while(l < lres.length && r < rres.length){ if(lres[l] < rres[r]){ res[c++] = lres[l++]; } else { res[c++] = rres[r++]; } } if(l == lres.length){ while(r < rres.length){ res[c++] = rres[r++]; } return res; } if(r == rres.length){ while(l < lres.length){ res[c++] = lres[l++]; } return res; } return res; } public static void main(String[] args) { int [] aa={2,4,1,3,6,5,7,9,8}; ZZ zz = new ZZ(); int [] zzz = zz.sort(aa); for(int a : zzz){ System.out.println(a); } }  } 4、构造器    public class Fa {     public Fa(){ aa(); } public void aa(){ System.out.println("aaa"); }    }        public class Son extends Fa{     int b = 1; public void aa(){ System.out.println("bbb"+b); } public static void main(String[] args) { Son son = new Son(); son.aa(); }    }    输出的结果为:       bbb0       bbb1 并没有输出aaa,是因为子类的方法覆盖掉父类的方法,那么为什么b的值会为0和1呢,因为在父类中并没有执行到b赋值这一步 5、变量的初始化    1)public class test{      int a; static int b;   {   int c; }       static{    int e; int f;  }    public test(){    System.out.println(1);  }  //先加载静态b,e,f,之后是a,c,最后是构造器    }        2)public class test{      int a; static int b;   {   int c; }       static{    int e; b=1;  }    public test(){    System.out.println(1);  }  //先加载静态b,之后去复制b,在去加载e,之后是a,c,最后是构造器    }        3)public class test{      int a; {   int c; }       static{    int e; b=1;  }    static int b;  public test(){    System.out.println(1);  }  //先加载静态b,之后去复制b,在去加载e,之后是a,c,最后是构造器    }        4)public class test1 extends test{       int a;     static int b; {   int c; }       static{    int e; b=1;  }      public test1(){    System.out.println(1);  }    public static void main(String [] agrs){    new test1(); //此时会先执行父类的静态(test),之后执行子类的静态(test1),之后执行父类的非静态,子类的非静态  }    }
    转载请注明原文地址: https://ju.6miu.com/read-1888.html

    最新回复(0)