hashCode和equals之间的关系
final关键字的作用是什么
是否可以从一个static方法内部发出对非static方法的调用?
接口和抽象类的区别(必会)
Object类中的常用方法
什么是String,它是什么数据类型?
创建String对象的不同方式有哪些?
如何让一个字符串变成小写或大写形式?
Java 中操作字符串都有哪些类?它们之间有什么区别?
String str="i"与 String str=new String("i")一样吗?
每一个对象都可以调用hashCode方法得到自己的hash值,在一些集合中hashCode通常拿来做提前判断。通常会先进行hashCode()判断。
equals()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。hashCode()相等的两个对象他们的equals()不一定相等,也就是hashCode()不是绝对可靠的。
对于需要大量并且快速的对比的话如果都用equals()去做显然效率太低,所以解决方式是,每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equals()去再对比了),如果hashCode()相同,此时再对比他们的equals(),如果equals()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!
final表示最终的、不可变的
修饰类 表示类不可被继承
修饰方法 表示方法不可被覆盖 无法被重写
修饰变量 表示变量一旦被赋值就不可以更改
不可以。static方法是静态方法,是属于类的方法,非static方法是属于对象的方法。因为非static方法是要与对象关联在一起的,必须在创建出一个对象后,才可以通过这个对象调用非static方法;而static方法可以直接通过类名来调用,不需要创建对象。也就是说,在一个static方法被调用时,还可能没有创建任何实例对象,此时如果从static内部发出对非static方法的调用,非static方法是无法关联到对象的。
Object():默认构造方法,是所有类的父类 任何类都默认继承Object 它位于java.lang包中
clone():创建并返回此对象的一个副本
equals():比较两个对象是否相等, 在Object中equals跟==是一样的 一般子类都要重写这个方法
toString():返回该对象的字符串表示
hashCode():返回该对象的哈希值, Object中该方法默认返回该对象堆内存地址
getClass():获取对象运行时的class对象,返回一个对象的运行时类
notify():唤醒此对象监视器上等待的单个线程
notifyAll():唤醒此对象监视器上等待的所有线程
finalize():当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法
wait():导致当前的线程等待,直到其它线程调用此对象的notify()或notifyAll()
wait(long timeout):导致当前的线程等待调用此对象的notify()或notifyAll()
wait(long timeout, int nanos):导致当前的线程等待,直到其他线程调用此对象的notify()或notifyAll(),或其他某个线程中断当前线程,或者已超过某个实际时间量。
registerNatives():对本地方法进行注册
String是定义在 java.lang 包下的一个类。属于引用数据类型。
String是不可变的,JVM使用字符串池来存储所有的字符串对象。
和使用其他类一样通过new关键字来创建。使用这种方式时,JVM创建字符串对象但不存储于字符串池。我们可以调用intern()方法将该字符串对象存储在字符串池,如果字符串池已经有了同样值的字符串,则返回引用。
使用双引号直接创建。使用这种方式时,JVM去字符串池找有没有值相等字符串,如果有,则返回找到的字符串引用。否则创建一个新的字符串对象并存储在字符串池。
String str = new String("abc");
String str1 = "abc";
使用toUpperCase 和 toLowerCase 方法让一个字符串变为 大写或小写。
操作字符串的类有:String、StringBuffer、StringBuilder。
String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象,而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。
StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。
不一样,因为内存的分配方式不一样。String str="i"的方式,Java 虚拟机会将其分配到常量池中;而 String str=new String("i") 则会被分到堆内存中。