java基础

1. equals和==的区别:

​ 对于基本数据类型,int,double等,“==”号判断两者的数值是否相等,而对于字符串(引用数据类型),如“Hello!”对象,“==”号判断的是两者的指向字符串地址是否相同,如要判断两个字符串其中的每一个字符是否相同,可以用equals()方法。

​ 注意,如果字符串在创建时没有选择重建字符串,那么两个对象指向的字符串地址是一致的,但是如果修改其中一个对象的值,该对象指向的字符串地址会改变,另外一个对象仍旧指向原来的字符串地址没有改变,这是在底层的java逻辑设置中的。但是一开始就是重建两个字符串则不存在这样的问题,就是说即使两个对象创建的字符串相同,这两个对象指向的字符串地址也不一致。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package practiceClass.a0512;

public class a01_test {
public static void main(String[] args) {
String A = new String("Sort");
String B = new String("Sort");
String C = "Sort";
String C_1 = "Sort";
System.out.println(A.equals(B)); // True
System.out.println(A.equals(C)); // True
System.out.println(B == C); // False
System.out.println(A == B); // False
System.out.println(C == C_1); // True
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class b01_test {
public static void main(String[] args) {
String A = new String("Sort");
String B = new String("Sort");
String C = "Sort";
String C_1 = "Sort";
C_1 = C_1 + "ing";
System.out.println(A.equals(B)); // True
System.out.println(A.equals(C)); // True
System.out.println(B == C); // False
System.out.println(A == B); // False
System.out.println(C == C_1); // False
System.out.println(C); // Sort
System.out.println(C_1); // Sorting
}
}

2. 重写和重载

方法的重写

  1. 当父类的方法不能满足子类现在的需求时,需要进行方法的重写
  2. 格式是在重写后的方法上面加上 ‘@Override’ ,该标志是用来校验子类重写的方法格式是否是正确的,当然不加也可以,但最好加上
  3. 子类的重写方法权限最好用父类的保持一致,当然子类的权限可以大于等于父类

方法的重载

3. 单与运算符&和双与运算符&&的区别

4. 形参和实参

形参是定义通用方法时输入的形式参数,如Person p

而实参是在实际调用这个方法时输入的实际参数,如Student s、Teacher t

5. String,StringBuffer和StringBuilder

特性 String StringBuffer StringBuilder
是否可变 不可变 可变 可变
变量是否跨线程 不跨
性能 较低(修改创建变量) 比String高(有线程同步开销) 较高
使用场景 字符串内容少量修改 多线程环境下同步修改 单线程环境下修改

​ 因此,在实际开发中

  1. 如果在多线程环境下频繁操作字符串,可以选择StringBuffer
  2. 如果是单线程,用StringBuilder
  3. 如果字符串很少修改,直接使用不可变的String