2024-03-20

==和equals的区别

==:对于==比较的是值是否相等

如果作用于基本数据类型的变量,则直接比较其存储的值是否相等,

如果作用于引用类型的变量,则比较的是所指向的对象的地址是否相等。

其实==比较的不管是基本数据类型,还是引用数据类型的变量,比较的都是值,只是引用类型变量存的值是对象的地址

equals: 比较的是是否是同一个对象

首先,equals()方法不能作用于基本数据类型的变量,

另外,equals()方法存在于Object类中,而Object类是所有类的直接或间接父类,所以说所有类中的equals()方法都继承自Object类,在没有重写equals()方法的类中,调用equals()方法其实和使用==的效果一样,也是比较的是引用类型的变量所指向的对象的地址,不过,Java提供的类中,有些类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的值,比如String类。

Object类equals()方法源码:

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

String类equals()方法源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
String和StringBuilder和StringBuffer的区别
String StringBuffer StringBuilder
执行速度 最差 其次 最高
线程安全 线程安全 线程安全 线程不安全
使用场景 少量字符串操作 多线程环境下的大量操作 单线程环境下的大量操作
  • String 是不可变的字符串类,每次对其进行修改都会创建一个新的对象。
  • StringBuffer 和 StringBuilder 是可变的字符串类,可以高效地进行字符串操作。
  • StringBuffer 是线程安全的,适合多线程环境下使用;StringBuilder 不是线程安全的,适合单线程环境下使用。

详细区别

ArrayList和LinkedList的区别
  • ArrayList的实现是基于数组,LinkedList的实现是基于双向链表。

  • 对于随机访问,ArrayList优于LinkedList

  • 对于插入和删除操作,LinkedList优于ArrayList

  • LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。

for(int i = 0; i < list.size(); i++)和for(int i = 0, n = list.size(); i < n; i++)的区别

for循环的写法

SpringBoot配置文件加载顺序

如果同时存在 application.properties | application.yml (.yaml) , properties > yml > yaml

  • 同一目录下存在:application.properties 和 application.yml 时,application.properties 优先级 > application.yml。也就是说,两者同时存在时 properties 文件会覆盖 yml 文件。

  • Spring Boot 的配置文件可以放在 classpath 下和与当前项目目录下,不过不同目录下优先级也不同。

    以 properties 文件为例,我们先分别放置到不同目录下:如图img测试后,得出结论为,优先级为 C>D>A>B。

    总结为:当前项目路径 config 目录下 (file:/config)> 当前项目路径 (file:/)> 类路径 config 目录下 (classpath:/config)> 类路径下 (classpath:/)。

2024-3-24

HashMap的默认初始长度是多少

HashMap的默认初始长度是16

InnoDB 所使用的索引的数据结构是什么

B+树

SpringMVC执行流程

Java IO的字节流和字符流

字节流一般用来处理图像、视频、音频、PPT、Word等类型的文件。

字符流一般用于处理纯文本类型的文件,如TXT文件等,但不能处理图像视频等非文本文件。

用一句话说就是:字节流可以处理一切文件,而字符流只能处理纯文本文件。

参考链接