java基础知识(三)

1.21 说一说hashCode()和equals()的关系

hashCode用于获取哈希值,equal用于确定两个对象是否相等

  • 如果两个对象相等,则他们必须拥有相同的哈希值
  • 两个对象哈希值相等,则他们未必相等

1.22 为什么要重写hashCode()和equals()?

  • Object类提供的equals()方法默认是用==进行比较,但在实际业务中,通常是要两个对象内容相同则相同,所以要重写
  • equal()重写了,则hashcode()必须重写。

1.23 ==和equals()有什么区别?

==运算符:

  • 对于基本数据类型,比较其值大小
  • 对于引用数据类型,则比较两个对象的内存地址

equals():

  • 没有重写前默认是==运算符,比较两个对象的内存地址
  • 重写后通常是比较两个对象内容,内容相等则相等

1.24 String类有哪些方法?

  • charAt() 获取指定字符索引
  • indexOf() 获取索取指定索引字符
  • subString(int beginIndex, int endIndex)获取指定位置子字符串
  • String toUpperCase():将此字符串中所有的字符大写;
  • String toLowerCase():将此字符串中所有的字符小写;

1.25 String可以被继承吗?

String类有final修饰,不可被继承

因为要保证String类不可变,所以用final修饰,如果可以继承的话就可能存在子类方法修改字符串的值,字符常量池就没有存在的意义了

1.26 说一说String和StringBuffer有什么区别

  • String是一个不可变类型的类,一旦对象创建好之后,只到对象销毁其字符串序列都不会变
  • StringBuffer是一个字符可变类型,内部有许多操作字符串的API,最终可以转换为String

1.27 说一说StringBuffer和StringBuilder有什么区别

  • StringBuffer和StringBuilder都是字符可变的
  • StringBuffer和StringBuilder有共同的父类AbstractStringBuilder,常用API差不多
  • StringBuffer是线程安全的,StringBuilder是线程不安全的
  • 要创建可变字符串,建议使用StringBuilder

1.28 使用字符串时,new和""推荐使用哪种方式?

  • “hello”会在常量池保存一个hello的字符串,由JVM管理
  • new String(“hello”)的话首先会在常量池保存,然后再创建一个String对象
  • new方法会多创建一个对象

1.29 说一说你对字符串拼接的理解

  • +运算符适合字符直接量的拼接,java会有编译器优化和完整的字符串一样
  • StringBuilder适合线程不安全,字符串包含变量,性能较高
  • StringBuffer适合线程安全,字符包含变量

1.30 两个字符串相加的底层是如何实现的?

  • 如果是字符串直接量相加的话,编译器会将其优化为一个完整的字符串
  • 如果拼接的字符串中包含变量,则在编译时编译器采用StringBuilder对其进行优化,即自动创建StringBuilder实例并调用其append()方法,将这些字符串拼接在一起。

1.31 String a = "abc"; ,说一下这个过程会创建什么,放在哪里?

  • JVM会使用常量池管理字符串,这个过程首先会检查常量池中存不存在abc,如果存在则直接复用常量池中已有的abc,不存在则将abc放入常量池

1.32 new String("abc") 是去了哪里,仅仅是在堆里面吗?

JVM首先将abc放入字符串常量池,然后再在堆内存创建一个String对象,对象中的数据引用常量池的直接量

1.33 接口和抽象类有什么区别?

接口体现的是一种规范,而抽象类体现的是一种模板式设计

  • 接口和抽象类都不能实例化,他们都位于继承树的顶端,用于被其他类实现或继承
  • 接口和抽象类都可以包含抽象方法,其实现类或者子类都必须实现这些抽象方法
  • 一个类最多只能继承一个父类,包括抽象类,而一个类可以实现多个接口
  • 接口里不包含构造器;抽象类里可以包含构造器。抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。

1.34 接口中可以有构造函数吗?

由于接口定义的是一种规范,因此接口里不能包含构造器和初始化块定义。

1.35 谈谈你对面向接口编程的理解

接口体现的是一种规范和实现分离的设计,充分利用接口可以降低程序各模块间的耦合,从而提高程序的扩展性和可维护性

 

posted @ 2022-04-12 13:07  yxhhhhhh  阅读(42)  评论(0)    收藏  举报