类似于"abcd".equals(someString)想必大家都很熟悉了,但是如果是在某个Long或者Integer类型对象上调用equals方法与someString做比较的话,结果会是怎样呢?
不看源码之前,先猜想:
可能1、对Long(Integer)对象调用toStirng方法后再比较。
可能2、用类似Intger.parseInt(someString)来比较,可能性不大,毕竟不是所有类型的对象都有类似这样的方法,但是toString()是每个类都有的。
那么,翻看源码吧,首先看java.lang.Integer
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
原来,比较之前,首先会判断待比较对象的类型是否是Integer类型(或者其派生类型,但由于Integer已经声明为final class,故没有派生类),如不是,则直接返回false,否则比较两者的数值。类似的,Long也是这样的实现方式。
所以,在Long(Integer)上调用equals方法与Stirng类型比较时,需要先调用其toString()方法,然后再比较。这也算是昨天开发过程中碰到的个小插曲吧,在这里记录一下,与大家分享。
分享到:
相关推荐
### Java中Long与Integer比较易犯错误总结 #### 一、引言 在Java编程过程中,经常需要对数值进行比较操作。对于基本数据类型如`int`和`long`,可以直接使用`==`进行比较。然而,当涉及到它们的包装类`Integer`和`...
默认情况下(没有覆盖equals方法)下的equals方法都是调用Object类的equals方法,而Object的equals方法主要是用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象)。 2. int、char、long各占多少字节数...
其他的封装类,如 Integer、Float 等,也都是重写了 equals() 方法来比较它们的实际内容。 在 Java 规范中,对于 equals() 方法的使用有几个重要的规则需要遵守: 1. 自反性:对于任何非空引用值 x,x.equals(x) ...
- 解释: `str1`和`str2`虽然是两个不同的`String`对象,但由于它们的内容相同,所以通过`equals`方法比较时返回`true`。而`==`运算符比较的是对象的引用是否相同,这里两者是不同的对象实例,所以返回`false`。 **...
- 包装类提供了与原始类型相比较的方法,如`equals()`、`compareTo()`,可用于对象间的比较。 5. **转换方法**: - `parseInt()`, `parseFloat()`, `parseLong()`等静态方法可以将字符串转换为对应的数值类型。 ...
答:switch 语句可以作用在 byte, short, char, int 等整数类型上,但不能作用在 long 或 String 上。 2. 什么是自动类型转换? 答:自动类型转换是指 Java 编译器在编译时自动将一种数据类型转换为另一种数据类型...
== 运算符比较的是对象的内存地址,而 equals() 方法比较的是对象的内容。 在 Java 中,每个对象都有一个 hashCode() 方法,该方法返回对象的哈希码。在散列集合中,hashCode() 方法用于定位对象的存储位置。equals...
Java中的包装类是指将基本数据类型封装成对象的类,如Byte、Short、Integer、Long等。每个基本数据类型都有对应的包装类。 7. null和空字符串 null表示没有对象的引用,而空字符串是长度为0的字符串对象。null可以...
== 运算符用于比较基本数据类型的值和引用类型的内存地址,而 equals 方法用于比较对象的内容是否相等。hashCode 方法用于计算对象的哈希码,在对象进行散列时作为 key 存入。equals 方法和 hashCode 方法的关系是:...
当需要将字符串转换为整数或长整数时,可以使用Integer.parseInt()和Long.parseLong()方法。对于可能非常大的数值,应使用Long,以避免溢出。 5. **通过空白字符拆分字符串** String类的split()方法使用正则...
例如,当我们把一个Integer对象赋值给int变量时,编译器会自动调用Integer对象的`intValue()`方法完成拆箱;反之,将int值赋给Integer对象时,会自动调用`valueOf(int)`方法完成装箱。 总结,Java的包装类是面向...
4. switch 语句:switch 语句可以作用于 byte、short、int、char、String、enum 等类型。 5. 内部类:内部类是写在一个类里面的类,它有很好的封装性,可以访问私有变量。 6. 多态:多态是指在运行时才能确定类型...
此外,Java的equals()方法在不同类中有不同的实现,比如String类就重写了equals()方法,使得字符串比较不再是简单的引用比较,而是基于字符串的内容来比较。这种行为上的差异,正是Java语言灵活性和强大功能的体现。...
例如,long 类型对应的包装类是 Long,int 类型对应的包装类是 Integer 等。 5. Date 类、Calendar 类、SimpleDateFormat 类 Java SE 中的 Calendar(日历)、Date(日期)和SimpleDateFormat(日期格式)组成了 Java ...
这是因为 equals() 方法比较两个对象时,编译器会自动调用 hashCode() 方法来比较两个对象是否生成相同的整数结果。 String, StringBuilder, StringBuffer 的区别 String 保存字符串常量,每次变化都会产生一个新...
10. **"=="和equals的区别**:"=="比较的是两个对象的引用是否相同,而equals方法比较的是对象的内容是否相等。对于非原始类型,重写equals方法是常见的做法。 11. **静态变量和实例变量**:静态变量属于类,所有类...
B选项中,`equals()`方法比较字符串内容,所以`new String("abc")`与`"abc"`内容相同,`equals()`返回`true`。D选项的`list.contains(null)`在空列表中查找`null`,所以返回`false`。 第六题展示了接口和类的使用。...
- 常用成员方法:`length()`获取字符串长度,`indexOf()`查找子串首次出现的位置,还有`substring()`截取子串,`equals()`和`equalsIgnoreCase()`比较字符串内容等。 5. **StringBuilder与StringBuffer**: - `...