diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java
index a14147299..10eee71d1 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java
@@ -67,6 +67,7 @@ public class ObjUtil {
*
CharSequence
* Map
* Iterator
+ * Iterable
* Enumeration
* Array
*
@@ -89,8 +90,8 @@ public class ObjUtil {
}
int count;
- if (obj instanceof Iterator) {
- final Iterator> iter = (Iterator>) obj;
+ if (obj instanceof Iterator || obj instanceof Iterable) {
+ final Iterator> iter = (obj instanceof Iterator) ? (Iterator>) obj : ((Iterable>) obj).iterator();
count = 0;
while (iter.hasNext()) {
count++;
@@ -107,7 +108,7 @@ public class ObjUtil {
}
return count;
}
- if (obj.getClass().isArray() == true) {
+ if (obj.getClass().isArray()) {
return Array.getLength(obj);
}
return -1;
@@ -121,6 +122,7 @@ public class ObjUtil {
* Collection
* Map
* Iterator
+ * Iterable
* Enumeration
* Array
*
@@ -146,8 +148,8 @@ public class ObjUtil {
return ((Map, ?>) obj).containsValue(element);
}
- if (obj instanceof Iterator) {
- final Iterator> iter = (Iterator>) obj;
+ if (obj instanceof Iterator || obj instanceof Iterable) {
+ final Iterator> iter = obj instanceof Iterator ? (Iterator>) obj : ((Iterable>) obj).iterator();
while (iter.hasNext()) {
final Object o = iter.next();
if (equals(o, element)) {
diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ObjectUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java
similarity index 78%
rename from hutool-core/src/test/java/cn/hutool/core/util/ObjectUtilTest.java
rename to hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java
index 02498f7fe..ee8378516 100644
--- a/hutool-core/src/test/java/cn/hutool/core/util/ObjectUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java
@@ -7,18 +7,40 @@ import cn.hutool.core.date.DateUtil;
import org.junit.Assert;
import org.junit.Test;
+import java.math.BigDecimal;
import java.time.Instant;
+import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
-public class ObjectUtilTest {
+public class ObjUtilTest {
@Test
- public void equalsTest(){
- final Object a = null;
- final Object b = null;
+ public void equalsTest() {
+ Object a = null;
+ Object b = null;
Assert.assertTrue(ObjUtil.equals(a, b));
+
+ a = new BigDecimal("1.1");
+ b = new BigDecimal("1.10");
+ Assert.assertTrue(ObjUtil.equals(a, b));
+
+ a = 127;
+ b = 127;
+ Assert.assertTrue(ObjUtil.equals(a, b));
+
+ a = 128;
+ b = 128;
+ Assert.assertTrue(ObjUtil.equals(a, b));
+
+ a = LocalDateTime.of(2022, 5, 29, 22, 11);
+ b = LocalDateTime.of(2022, 5, 29, 22, 11);
+ Assert.assertTrue(ObjUtil.equals(a, b));
+
+ a = 1;
+ b = 1.0;
+ Assert.assertFalse(ObjUtil.equals(a, b));
}
@Test
@@ -33,6 +55,9 @@ public class ObjectUtilTest {
map.put("c", "c1");
length = ObjUtil.length(map);
Assert.assertEquals(3, length);
+
+ final Iterable list = ListUtil.of(1, 2, 3);
+ Assert.assertEquals(3, ObjUtil.length(list));
}
@Test