String a=new String("foo");
String b=new String("foo");
两条 new语句创建了两个对象,然后用 a,b这两个变量分别指向了其中一个对象,这
是两个不同的对象,它们的首地址是不同的,即 a 和 b 中存储的数值是不相同的,所以,
表达式 a==b 将返回 false,而这两个对象中的内容是相同的,所以,表达式
a.equals(b)将返回 true。
“==”比较的是内存地址。 equals比较的是内存地址里面存储的值
方法的覆盖和重载
覆盖:
1. 覆盖方法不能比它所覆盖的方法访问性差(访问权限不能缩小)。
2. 覆盖方法不能比它所覆盖的方法跑出更多的异常。
3. 相同的方法名,返回值类型,参数列表。一个方法覆盖掉了另一个方法
重载:
1. 方法名必须相同
2. 参数列表不同
3. 方法的返回值类型可以相同也可以不同。仅仅是返回类型不同不足以称为方法的重载。
4. 使用相同的名字创建多个方法(返回值类型,参数列表不同)
多态是同一个行为具有多个不同的表现形式或形态的能力。
static:
1. 在同一个类中,静态方法只能访问静态属性或静态方法。
2.
在同一个类中,
静态方法不能直接调用非静态方法。
3. 静态方法中不存在当前对象,所以不能使用this和super关键字。
4. 静态方法不能被非静态方法覆盖
5. 构造方法不能声明为静态的。
6. 局部变量不能使用static修饰。
final:
1. 标记的类不能被继承。
2. 标记的方法不能被子类重写。
3. 标记的变量(成员变量或局部变量)成为常量,只能赋值一次。
4. 标记的成员变量必须在声明的时候赋值,如果在声明的时候没有赋值那么只有一次赋值的机会,而且再能在构造方法中赋值,然后才能使用。
5. 标记的局部变量可以只声明不赋值,然后再进行一次的赋值。
String,StringBuffer,StringBuilder,StringHelper区别:
String:字符串常量,是final修饰的是不可变的对象。
StringBuffer:线程安全的可变字符序列。
StringBuilder:非线程安全的。
StringHelper:字符串处理的辅助类。