课件中动手动脑1
(1)String类为字符串常量即经过初始化赋值后无法改变,StringBuffer类为字符串变量,用法为StringBuffer a=new StringBuffer(“”),括号中可以进行初始化也可以不用当用string a=“abc”,b=“abc”;时,二者是由字符串常量产生的变量,由于二者值相等,二者地址也就相等,而当用string a=new string(“abc”);string b=new string(“abc”);时,是为二者分配了不同的空间,所以二者的值虽然相等但是他们的首地址并不相等。
(2)equals与==的异同:对于字符串来说,当比较用String来定义的字符串时,==比较两个对象在内存中的首地址。equals()比较字符串中所包含的内容是否相同。如String s1,s2,s3 = "abc", s4 ="abc" ;s1 = new String("abc");s2 = new String("abc");那么s1==s2 是 false //两个变量的内存地址不一样,也就是说它们指向的对象不一样,故不相等。s1.equals(s2) 是 true //两个变量的所包含的内容是abc,故相等。而对于StringButter类,其并没有对equals这个方法进行重新定义,因此这个方法就来自Object类,而Object类中的equals方法是用来比较“地址”的。所以当用来比较用stringbuffer定义的字符串时,equals是用来比较地址的,当不是对于字符串来说时,equals与==是相同的,其都是表示比较对象的首地址。而对于用字符串常量产生的对象,当其值相等时是放在相同的位置的,所以二者地址相等,值也相等,即上述的s1.equals(s2)为true。对于符号“=”是将后者的值与地址都赋给前者。
而且equals不能用于基本类型的比较。
(3)枚举类型:利用enum来定义新的枚举类型:
如:public enum Light {
RED (1), GREEN (3), YELLOW (2); //利用构造函数传递参数
private int nCode ;
// 构造函数,枚举类型只能为私有
private Light( int _nCode) {
this . nCode = _nCode;
}
public String toString() {
return String.valueOf ( this . nCode ); //string.valueof()就是将括号中的参数转化为string类型。
}
}
(4)同名变量屏蔽原则:是指当全局变量与局部变量同名时,是允许的,而且在局部变量所控制的范围内屏蔽全局变量的影响,当父类中的变量与子类中变量同名时,父类和子类的变量是同时存在的,即使是同名。子类中看到的是子类的变量,父类中看到的是父类中的变量。它们互相隐藏,而同名的方法则是实实在在的覆盖(重写)。