请注意,本文编写于 2119 天前,最后修改于 2119 天前,其中某些信息可能已经过时。
java中==和equals和hashCode的区别
==
对于基本数据类型,是判断值是否相同,对于引用类型来说,是判断地址是否相同equals()
对于没有重写的引用类型,判断地址是否相同,如果重写的话,就根据重写的内容的方法进行判断,比如String
系统已经重写了,所以直接比较的字符串的值。
equals() 和 hashCode() 到底什么关系?
我先说结论:
- 规定,两个变量equals() 返回1,理论上应该两个变量的hashcode() 必须相等
- 但事实上,如果单纯只是使用
equals()
比较,和hashcode()
没有关系。 - 上面这个规定的原因是,如果以该变量类型建立Set(去重集合),被认为是同一个元素的条件是hashcode() 相等且 equals() 返回1,这是由hash表的结构所决定的。所以为了避免问题,一般都要保证
equals()
返回1的时候,对应hashCode()
的值也相等
int、char、long各占多少字节数
- int 4字节
- char 1字节
- long 8字节
int与integer的区别
- Integer是int的包装类;int是基本数据类型
- Integer变量必须实例化后才能使用;int变量不需要;
- Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;
- Integer的默认值是null;int的默认值是0
谈谈对java多态的理解
多态存在的三个必要条件
- 要有继承
- 子类要重写父类的方法
- 父类引用指向子类对象
String、StringBuffer、StringBuilder区别
- String 字符串常量,是一个不可变的对象,对String的修改实际上是生成了一个新的String对象
- StringBuffer 字符串变量(线程安全)
- StringBuilder 字符串变量(非线程安全)
什么是内部类?内部类的作用
将一个类的定义,放在另一个类的定义内部,那这个类,就是内部类
- 内部类方法可以访问该类定义所在作用域中的数据,包括被 private 修饰的私有数据
- 内部类可以实现 java 单继承的缺陷
https://blog.csdn.net/sinat_34344123/article/details/81942427
https://juejin.im/post/5a903ef96fb9a063435ef0c8
抽象类和接口区别
相同点:
- 都不能被实例化
- 都能包含抽象的方法,这些抽象的方法用于描述类具备的功能,但是不比提供具体的实现。
区别:
- 在抽象类中可以写非抽象的方法,从而避免在子类中重复书写他们,这样可以提高代码的复用性,这是抽象类的优势;接口中只能有抽象的方法。
- 一个类只能继承一个直接父类,这个父类可以是具体的类也可是抽象类;但是一个类可以实现多个接口。
抽象类的意义
抽象类是对根源的抽象
抽象类与接口的应用场景
https://www.zhihu.com/question/20149818
抽象类是否可以没有方法和属性?
接口的意义
接口是对动作的抽象
进程和线程的区别
进程是资源分配单位,线程是调用单位
线程共享进程资源,共享地址空间,独享栈空间
final,finally,finalize的区别
序列化的方式
序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
- Serializable 接口,除了实体内容外要创建一个 serialVersionUID 属性
- Parcelable 接口,重写四个函数
https://blog.csdn.net/u011240877/article/details/72455715
Serializable 和Parcelable 的区别
- Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据
- 而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化
成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用
- 成员内部类:作为外部类的一个成员存在,与外部类的属性、方法并列。
- 静态内部类:和成员内部类结构上相似,但是静态内部类的对象可以直接生成,不需要先生成外部类的对象
- 局部内部类:定义在方法内部
- 匿名内部类:匿名内部类就是没有名字的内部类。
闭包和局部内部类的区别
局部内部类是实现闭包的一种方式
但java的匿名内部类引用外部变量的时候,外部变量必须申明为final。