== ==操作符是专门用来比较两个变量的值是否相等。也就是比较两个变量所对应内存中的地址是否相等。比较两个基本类型变量是否相等只能用==。 如果一个变量指向的类型是对象类型时,这就涉及到两块内存。 例如: object obj = new object(); 这里面obj是一块内存,new object()又是一块内存,而obj内存中的值就是new object()所在内存的起始地址。对于对象类型,如果判断两个变量是否指向同一对象时(就是比较内存是否相同)就用==。 equals equals是比较两个对象的内容是否相等,但是这是两个独立的对象不是一个对象。 String str1 = new String(" "); String str2 = new String(" "); str1.equals(str2)的值为true,但是str1 == str2的值为false。str1和str2的内容是相等的,但是内存所在的位置是不同的。 实际应用时,一般String类型都是采用equals方法。 如果自己没有重写equals方法,他就自动调用单根类object类的equals方法,我们可以看到这和用==没有区别,像机械基本类型就是这样定义如下: boolean equals(object o){ return this == o; } 新的感觉: '==’考察的是内存,equals是内容。 int i = 3; int j = 3; System.out.println(i == j); 结果是true string i = “abc”; string j = “abc"; Systrm.out.println(i == j); 结果是true string i = new string("abc"); string j = new string("abc");
Systrm.out.println(i == j);
结果是false 这个涉及到Java内存的管理问题,就是栈和堆。这里面涉及到栈的共享机制,比如第一个中的int i=3;它会首先在栈中寻找'3'这个内容,如果有的话就直接指向他,没有就开辟内存并将内容放入3.(时间不够,再写吧) |
|