JAVA基础
1,String,StringBuffer,StringBuilder有什么区别
String | StringBuffer | StringBuilder |
---|---|---|
不可变 因为value是final,修改值他就会创建一个新的对象,旧的回收 | 可变的 其父类(AbstractStringBuilder) value的数组不是final,当修值直接修改,不会创建新的对象 | 可变的 其父类(AbstractStringBuilder)value的数组不是final,当修改值直接修改,不会创建新的对象 |
线程是安全 ,因为final修饰 | 线程安全 因为大部分主要方法,例如append(),insert(),delete(),replace()等方法都是synchronized;但是因为加了锁会导致变慢 | 线程不安全 单线程建议使用,因为没加锁,速度快 |
Java中==和equals有什么区别
区别:==是运算符
,equals是方法
==
比较两个值是否相同
如果比较的对象是基本数据类型,则比较数值是否相等;
如果比较的是应用数据类型则比较的是对象内存地址是否相等;
因为Java只有值传递,对于==来说不管是比较基本数据类型,还是应用数据类型的变量,其比较的都是值,只是引用类型变量存的值是对象的地址,引用类型对象变量其实是一个引用,他们的值是指向对象所在的内存地址
euqals
比较的是对象的内容是否相等
equals()方法存在于Object类中,而Object类是所有类的父类,在Object中定义了equals方法:如下
public boolean equals(Object obj) {
return (this == obj);
}
- 如果类未重写equals方法
调用equals时,会调用Object中的equals方法,(实际使用的也是==操作符) - 如果类重写了equals方法
调用equals时,会调用该类自己的equals方法(一般是比较对象类容是否相等)。比如
2.1 String:比较字符串类容是否相同;
2.2 Integer: 比较对应的基本数据的int值是否相同