java中=比较问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 04:27:16
比如创建了一个对象 Float f1 = new Float(5);
跟float f2 = 5;
这两个直比较 ,在JDK1.5中,可以自动拆装基本类型数据.
f1 = f2 ;
f1.equal(f2) ;
两种比较是否相等??
能简单介绍下,基本数据类型的对象(Float f1 = new Float(5);) 跟其直接赋值(float f2 = 5.0f) 直接用等号跟用equals比较差别? 还有euqals方法不是只能比较两个对象的吗,这两个值一个是对象,一个是基本类型,能比较吗?

类Float重新写了Object的equals()方法。
下面是类Float的equals()方法的代码,你看了就明白了:
public boolean equals(Object obj) {
return (obj instanceof Float)
&& (floatToIntBits(((Float)obj).value) == floatToIntBits(value));
}
在这里,也就是判断值的相等与否。

public class StudentName{

public static void main(String[] args) {
Float a = new Float(5);
Float b = 5.0f;
System.out.println(a==b);
System.out.println(a.equals(b));
}

}
result:
false
true

楼上的结果错了把

从结果上看 是相等的

字符串比较 ==与equals辨析
字符串比较

字符串比较是java程序常遇到的问题,新手常用==进行两个字符串比较,实际上这时进行的地址比较,不一定会返回正确结果.在java中,正确的进行字符串比较的函数String类的equals()函数,这才是真正的值比较.

==的真正意义

Java中,==用来比较两个引用是否指向同一个内存对象.对于String的实例,运行时JVM会尽可能的确保任何两个具有相同字符串信息的String实例指向同一个内部对象,此过程称为”驻留”(interning),但它不助于每个String实例的比较.一个原因是垃圾收集器删除了驻留值,另一个原因是String所在的位置可能被别的String实例所取代.这样的话,==将不会返回预想的结果.