标签:就是 内存地址 重写 内存 stat 改变 return 比较 equals
==:
1.基础数据类型 比较的是 值
2.引用数据类型比较的是 内存地址
1.为什么String 类中的equals是比较的 字符串内容
01.查询Object类中的方法
public boolean equals(Object obj){
return(this==obj); 比较的是内存地址
}
02.再去看String类中的方法
String中的equals是重写了Objest类中的equals方法
比较的是内容
String a = "abc";
String b = "abc";
String c = new String("abc");
System.out.println(a.equals(b)); // 值肯定一致 所有返回 true
System.out.println(a == b);// 内存地址也一致 所以 true
System.out.println("****************************************");
System.out.println(a.equals(c));// 值肯定一致 所有返回 true
System.out.println(a == c);// 内存地址不一致 所以 false
String a = "a";
String b = "bc";
String c = "abc";
System.out.println(c == ("a" + "bc")); //true
(1).在程序编译期间 会把常量(不变)a 和常量bc 合并成 abc
(2).之后再和“abc“进行比较
String a = "a";
String b = "bc";
String c = "abc";
System.out.println(c == (a + b)); // false
(1). a 和 b 都是变量(变化), 在编译期间无法确定变量的值
(2). c在编译期间已经确定, ab无法确定
final String a = "a";
final String b = "bc";
String c = "abc";
System.out.println(c == (a + b)); // true
final可以修饰:
(1).修饰的属性,就是常量 运行期间不能改变
(2).修饰的方法,不能被子类重写
(3).修饰的类,不允许被继承
public static void main(String[] args) {
// 创建两个学生对象 之后 使用 ==进行比较
Student stu1 = new Student(1, "小黑");
Student stu2 = new Student(1, "小黑");
System.out.println(stu1 == stu2); // 内存地址不一致 false
/**
* 如果对象的每个属性都一致!我们 想个办法让 两个对象相等:
*/
System.out.println(stu1.equals(stu2)); // 内存地址不一致 但是内容一致 我们认为是true
}
标签:就是 内存地址 重写 内存 stat 改变 return 比较 equals
原文地址:http://www.cnblogs.com/dongfengpo/p/8004838.html