zoukankan      html  css  js  c++  java
  • java知识回顾

    一、构造方法能不能被继承

      当然不能,1.构造方法是类的唯一入口

           2.构造方法与类名相同

           3.子类构造方法中隐式的调用了父类的构造方法

    二、值传递和引用传递、不变类和可变类、直接赋值和浅拷贝和深拷贝

        1.直接赋值:在java中,对象的传递、方法参数的传递(将实参赋值给行参)多数是通过=来直接赋值的
            值传递是值的copy
            引用传递是引用的copy,即内存地址的copy
            引用传递又分两种 1.如果是不变类 对引用的操作不会改变原引用地址,但会改变现引用地址的值,他们指向不同的对象(new对象除外)
                                 2.如果是可变类 对引用的操作不会改变原引用地址,但会改变对象的值,他们指向的是同一个对象(new对象除外)

               3.不管是可变不可变,只要使用new来重新赋值,则是一个新的引用与对象,不会修改原来的引用与对象
            2.浅拷贝:对象实现cloneable接口,重写clone类,可以拷贝对象内的基本数据类型以及不变类型,引用类型不会被拷贝

        3.深拷贝:对象中的引用类型也实现cloneable接口。。。

             修改引用时new新的对象,如get、set时

            序列化(腌酸菜、冷藏)

       可变类:提供修改自身的方法,不可变类:要修改对象时必须new一个对象,如String、基本类型的包装类、BigInteger、BigDecimal等。(不可变类是线程安全的)

    三、String、StringBuffer与StringBuilder之间区别

      String:字符串常量,不可变类

      StringBuilder:字符串变量,线程非安全类

      StringBuffer:字符串变量,线程安全

      延伸:String str = “This is only a” + “ simple” + “ test”;jvm只生成了一个String对象

         String str2 = “This is only a”;   String str3 = “ simple”;   String str4 = “ test”;   String str1 = str2 +str3 + str4;  jvm生成了好多String对象

    四、i=i++问题

      

    1 int i = 0;
    2 for(j=0;j<5;j++){
    3      i=i++;
    4 }

      最后输出的是0,在jvm内,i=i++实际执行可以理解成这样

    int temp = i;
    i++;
    i = temp;

      步骤1 JVM把count值(其值是0)拷贝到临时变量区。 步骤2 count值加1,这时候count的值是1。 步骤3 返回临时变量区的值,注意这个值是0,没修改过。 步骤4 返回值赋值给count,此时count值被重置成0。

    五、equals,hashcode和==的区别

      java中有两种数据类型:

      1.基本数据类型,也称原始数据类型

      byte,short,char,int,long,float,double,boolean   他们之间的比较,应用双等号(==),比较的是他们的。 

      2.引用类型(类、接口、数组)   

      当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。

      ==:比较基本数据类型的值,比较引用类型内存地址

      equals:比较内存地址中的对象是否为相同对象,equals比较八大包装对象(如int,float等)和String类(因为该类已重写了equals和hashcode方法)对象时,默认比较的是值,在比较其它自定义对象时都是比较的引用地址

      hashcode:hashcode是用于散列数据的快速存取,如利用HashSet/HashMap/Hashtable类来存储数据时,都是根据存储对象的hashcode值来进行判断是否相同的。

      注:java规定,equals后两个对象一致,hashcode必须一致;equals不一致时,hashcode可能一致;

          但是程序员应该知道,给不相等的对象产生截然不同的整数结果,有可能提高散列表的性能。减少hash碰撞

    六、java常量池及包装类型常量池

      

  • 相关阅读:
    两数相除(leetcode29)
    基本数据类型与包装数据类型的使用标准
    BigDecimal
    整型包装类值的比较
    实现strStr()(leetcode28)
    移除数组(leetcode27)
    删除排序数组中的重复项(leetcode26)
    mybatis.xml配置文件详解
    多表连接
    动态SQL
  • 原文地址:https://www.cnblogs.com/bigmonkeys/p/7846894.html
Copyright © 2011-2022 走看看