2023-05-18 题目
1、String 字符串
- String 不是基本数据类型,且是不能被继承的,因为string类被final修饰
//源码
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {}
常见题目:
public static void main(String[] args) {
// a 为一个引用
String a = new String("ab");
// b为另一个引用,对象的内容一样
String b = new String("ab");
// 放在常量池中
String aa = "ab";
// 从常量池中查找
String bb = "ab";
// true
System.out.println(aa == bb);
// false,非同一对象
System.out.println(a == b);
// true
System.out.println(a.equals(b));
// false
System.out.println(a == aa);
}
public static void main(String[] args) {
String s = "helloWord";
String s1 = "hello"+"Word";
String s2 = "hello";
String s3 = "Word";
String s4 = s2+s3;
String s5 = new String("helloWord");
//true s是常量池的,s1(编译期已经组合在一起了)也指向常量池的同一个对象
System.out.println(s == s1);
//false Java在进行字符串拼接时,会生成新的字符串对象,s4指向的不在常量池了
System.out.println(s == s4);
//false Java在进行字符串拼接时,会生成新的字符串对象,s4指向的不在常量池了
System.out.println(s1 == s4);
//false s是常量池的,s5是new的,地址不一样
System.out.println(s == s5);
}
2、String、StringBuilder和StringBuffer
string: 不可变的,一旦被创建是不能被修改的,每次拼接字符串都是new了一个新的对象
stringBuilder: 可变的,线程不安全,执行效率高,适用于单线程的情况下,对字符串进行修改;
StringBuffer: 可变的,线程安全,执行效率稍低,适用于多线程的情况下,对字符串进行修改;
3、==和equals的区别
==:对于基本数据类型来说比较的是值的大小,对于引用类型来说比较的是地址是都相同
equals:对于没有重写object中的equlas的方法来说,==和equals在引用类型比较的时候,作用是一样的,对于string来说,equals就是比较两个字符串的内容是否相等
object中的equals源码:
public boolean equals(Object obj) {
return (this == obj);
}
4、重写hashCode()与 equals()
- hashcode()简介:
hashcode()获取哈希码,也称为散列码,返回的是一个int整数,是Object中的一个native的本地方法,是使用c或者c++来实现的,将内存地址转换成一个整数返回;
public native int hashCode();
- hashcode码的作用
hashSet如何检查重复值:当你把对象加入到hashSet中时,会先计算对象的hashCode的值来判断对象加入的位置,且会和其他已经存在的值的hashCode进行比较,如果没有一样的,则没有重复的项,如果有重复项,则需要比较equals是否相同,相同则不要加入进去,这样的话则减少了equals的次数,提高了执行的速度;
-
如果两个对象相等,则hashCode一定也是相同的,两个对象相等的话,对两个对象分别调用equals方法方法都返回true,两个对象有相同的hashCode值,不一定相等的,所以说要是重写equals,则hashCode也需要覆盖的
-
两个对象不相等,也可能存在相同的hashCode值
因为 hashCode() 所使用的杂凑算法也许刚好会让多个对象传回相同的杂凑值。越糟糕的杂凑算法越 容易碰撞,但这也与数据值域分布的特性有关(所谓碰撞也就是指的是不同的对象得到相同的 hashCode 。文章来源:https://www.toymoban.com/news/detail-454961.html
所以 hashCode值只能用来缩小范围,而不是可以直接代表的一个对象的文章来源地址https://www.toymoban.com/news/detail-454961.html
到了这里,关于2023-05-18 题目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!