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。

问题来源

https://github.com/AweiLoveAndroid/CommonDevKnowledge/blob/master/interview/contents/java%E9%9D%A2%E8%AF%95%E9%A2%98.md

最后修改:2019 年 03 月 30 日
喜欢我的文章吗?
别忘了点赞或赞赏,让我知道创作的路上有你陪伴。