java宝典-ag凯发k8国际
1、==与equals的区别?
== :
基本类型:比较的就是值是否相同
引用类型:比较的就是地址值是否相同
equals :
引用类型:默认情况下,比较的是地址值,重写该方法后比较对象的成员变量值是否相同
java中所有的类都是继承与object这个基类的,在object类中定义了一个equals方法,这个方法的初始行为是比较对象的内存地址,但在一些类库中已经重写了这个方法(一般都是用来比较对象的成员变量值是否相同),比如:string,integer,date 等类中,所以他们不再是比较类在堆中的地址
object类中源码
public booleanequals(object var1) {return this ==var1;
}
2、string、stringbuffer、stringbuilder区别?
1.运行速度:stringbuilder >stringbuffer >string
string为字符串常量,而stringbuilder和stringbuffer均为字符串变量,即string对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。java中对string对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。而stringbuilder和stringbuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比string快很多。
2.线程安全:stringbuilder是线程不安全的,而stringbuffer是线程安全的
如果一个stringbuffer对象在字符串缓冲区被多个线程使用时,stringbuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但stringbuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用stringbuffer,但是在单线程的情况下,还是建议使用速度比较快的stringbuilder。
3.使用场景
string:适用于少量的字符串操作的情况
stringbuilder:适用于单线程下在字符缓冲区进行大量操作的情况
stringbuffer:适用多线程下在字符缓冲区进行大量操作的情况
string为什么设置成final?
1. 为了实现线程池
2. 为了线程安全
3. 为了实现string可以创建hashcode不可变性
总结
以上是ag凯发k8国际为你收集整理的java宝典_java宝典之_java基础的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: mysql中建立索引的原则_在sql数据
- 下一篇: java blockingqueue_j