关于java:Java复习

3次阅读

共计 1947 个字符,预计需要花费 5 分钟才能阅读完成。

Java 面试前知识点总温习

办法的重载与笼罩

重载:

一个类中能够定义多个办法名雷同,但参数不同的办法。调用时,会依据不同的参数主动匹配对应的办法。

重载的办法,理论是齐全不同的办法,只是名称雷同而已

办法重载条件:形参的类型,形参的参数,形参的程序不同。

笼罩(重写):

子类通过重写父类的办法,能够用本身的行为替换父类的行为。

办法的重写是实现多态的重要条件。

办法重载条件:

  1. 办法名,形参列表雷同
  2. 返回值类型和申明异样类型,子类小于父类
  3. 拜访权限,子类小于父类

toString() 办法

Object 类中定义有 public String toString() 办法,源码如下:

public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

默认会返回 类名 + @ + hashCode。

在打印对象对象时,会主动调用该对象的 toString() 办法。

==、equals() 办法、hashCode() 办法

==

== 代表比拟单方是否雷同。如果是根本类型则比拟值是否相等。如果是援用类型则比拟地址是否相等,即是否是同一个对象。

equals() 办法

equals() 办法在 Object 类中的定义如下:

public boolean equals(Object obj) {return (this == obj);  
} 

很显著是对两个对象的地址进行比拟。

而 String,Integer,Double 这些封装类在应用 equals() 办法时,曾经笼罩了 Object 类的 equals() 办法,进行内容的比拟。

当 equals() 办法被笼罩时,hashCode() 也要被笼罩。

hashCode() 办法

  • 在一个 Java 利用执行期间,如果一个对象提供给 equals() 办法做比拟的信息没有被批改的话,该对象屡次调用 hashCode() 办法,该办法必须始终如一返回同一个 hashcode 值。
  • 如果两个对象依据 equals() 办法是相等的,那么调用两个对象各自的 hashCode() 办法必须产生同一个 hashcode 值。
  • 不要求依据 equals() 办法不相等的两个对象,调用各自的 hashCode() 办法肯定产生不同的 hashcode 值。
hashcode 作用

想要明确 hashcode 的作用,必须先晓得 Java 中的汇合。Java 中的汇合有两类,一类是 List,一类是 Set。前者汇合内是有序的,元素能够反复;后者元素无序,但元素不能够反复。

判断元素是否反复须要用 equals() 办法,然而元素过多时,须要屡次调用 equals() 办法。会升高效率。

此时先计算 hashcode 定位一个地位,如果这个地位没有元素,它就能够间接贮存在这个地位,不必再进行比拟;如果有元素,就调用它的 equals() 办法与新元素比拟,雷同就不存了。这样理论调用 equals() 办法的次数就大大降低了。

简而言之:在汇合查找时,hashcode 能大大降低对象比拟次数,进步查找效率。

equlas() 办法后果为 true 的对象必须有雷同的 hashcode

如果两个对象 A 和 B 的 equals() 为 true,但后果不同,则 A 和 B 存入 HashMap 时计算的 HashMap 外部数组的索引地位可能不能。那么 A 和 B 可能同时存入 HashMap,而 HashMap 中不容许寄存反复元素。

String、常量池、StringBuffer、StringBuilder

String

  • String 类又称不可变字符序列

    • 为了节俭内存,JVM 专门用一片非凡的区域存储 String,如果存在的话间接援用,避免浪费内存,因而必须保障这个具体的常量不能变。
    • String 类里边是一个 private final char value[].
  • String 对象的两种创立形式

    String str1 = "abcd";
    String str2 = new String("abcd");
    System.out.println(str1==str2);//false
    • 第一种形式是在常量池中拿对象
    • 第二种形式是间接在堆内存空间中创立一个新对象

String 常量池

  • 间接用双引号申明的 String 对象会间接存储在常量池中
  • 如果不是双引号申明的对象,能够调用该对象的 String.intern() 办法。

    • 如果常量池中曾经蕴含一个等于此 String 对象内容的字符串,则返回该常量池援用
    • 如果常量池中没有,则在常量池中新创建,并返回新创建的援用
  • String s = new String(“abc”); 创立了两个对象,一个在常量池,一个在堆内存。

StringBuffer 和 StringBuilder

  • 都是可变字符序列
  • StringBuffer:线程平安,执行速度慢;多线程
  • StringBuilder:线程不平安,执行速度快;单线程
正文完
 0