每天5道面试题第一天

题目来自这里

1. java中==和equals和hashCode的区别

"=="
  在判断两个基本数据类型时,判断的是值是否相等。
  在判断引用数据类型时,判断的是两个对象在内存中存储的位置是否相等。
"equals(与…相等,等于)"
  如果不对equals方法进行重写,那么默认从Object父类中继承过来的equals方法和"=="是一样的。当我们要判断存储在堆中的内容是否相等时,我们需要重写equals方法。
"hashCode(哈希码)"
  当我们要将一个对象放入HashMap中时,会先根据hashCode方法计算出该对象的hash码,判断该hash码计算出的位置是否已经有元素,如果没有则直接放入这个位置,如果有就调用equals方法判断该位置的值和存入对象的值是否相等,如果相等就不存入,如果不等就放入集合中。
  所以当我们重写equals方法时也要重写hashCode方法。不然就不能将对象存入HashMap。
——参考的这里!


2. int与integer的区别

  Integer是int的包装类。
  Integer初始值是null,int初始值是0。
  非new生成的Integer对象值存储在常量池,new生成的对象存储在堆中。
  当值相等时,int和Integer进行==操作会返回true,因为会自动进行拆箱操作。
  当两个Integer对象进行比较时,如果在-128~127之间,值相等会返回true,因为Integer会对该区间进行缓存。否则返回false因为如果在区间外会产生一个新的对象。
——参考的这里!


3. 抽象类的意义

  抽象类可以使类的抽象性明确起来,告诉用户和编译器如何使用这个类。
  学生都上课,计算机专业的上计算机课,教育专业的上教育课,我们就可以把上课定义成一个抽象方法,学生类定义成一个抽象类,让不同专业的学生进行不用的实现。
——参考的这里!


4. 接口和抽象类的区别

  抽象类中可以有变量、实现了的方法也可以有抽象方法。接口中只能有抽线方法和静态常量。
  抽象类中可以有构造方法,但是不可以被实例化。
  如果一个类实现了一个接口,那么就要实现接口中的所有方法。
  如果一个类继承了一个抽象类,就要实现抽象类中的抽象方法,除非这个类也是一个抽象类。
  一个类只能继承一个抽象类,但是可以实现多个接口。
  接口支持多继承。


5. 能否创建一个包含可变对象的不可变对象?

  可以。我们可以在不可变对象的内部创建一个可变对象,在用户调用该对象时,返回该对象的一个深拷贝,这样就保证了对象的安全性。
——参考的这里!


以上内容只是个人见解,为了养成好习惯,如有问题请指出,我会及时改正并学习!

你可能感兴趣的:(每天5道面试题)