这是我在极客上为极客找到的代码,我对类Object和什么是深度比较感到困惑,我对Java相当陌生,我正试图尽可能深入地了解更多的东西。请不要被我愚蠢的怀疑所激怒
import java.util.Arrays;
class Test
{
public static void main (String[] args)
{
// inarr1 and inarr2 have same values
int inarr1[] = {1, 2, 3};
int inarr2[] = {1, 2, 3};
Object[] arr1 = {inarr1}; // arr1 contains only one element
Object[] arr2 = {inarr2}; // arr2 also contains only one element
if (Arrays.equals(arr1, arr2))
System.out.println("Same");
else
System.out.println("Not same");
}
} 发布于 2020-09-03 02:13:19
如果添加Arrays.deepEquals比较,则比较结果
if (Arrays.equals(arr1, arr2))
System.out.println("Same");
else
System.out.println("Not same");
if (Arrays.deepEquals(arr1, arr2))
System.out.println("Same");
else
System.out.println("Not same"); 在第二种情况下,应该是“相同的”。这是因为虽然Object[]和int[]本身是不同的对象,但它们的int内容是相同的
发布于 2020-09-03 02:30:42
Arrays.equal()用于比较一维数组。它将检查每个值,并检查它们是否相等。如果我们在多维数组上使用此方法,则此方法将失败。
Arrays.deepEquals()允许我们通过比较每一对(在2D数组的情况下)来检查多维数组是否相等,以查看它们是否相等。当您将此赋值设置为Object[] arr1 = {inarr1};时,由于inarr1是一个int数组,因此您是在生成一个数组的数组。
对于第二个问题,对象类是Java中所有类的父类,它描述了Java中的类应该包含/遵循的公共方法/行为。换句话说,所有类都必须并且确实是从Object类扩展而来的。这在大多数IDE中都是隐含的。
因此,创建Object类的对象就是简单地创建一个object类型的对象。您可以实例化到任何具体的子类。因此,它相当难以描述,也很少使用。就我个人而言,只有在重写比较器的compare方法时才会这样做。
发布于 2020-09-03 02:31:05
Object是一个class,就像任何其他class一样,但不同之处在于每个class都是它的后代。这意味着您可以将任何对象转换为Object。这就是Object对象的含义。
至于深度比较:
java中有两种类型的对象比较-浅的和深的。
当您使用“==”运算符时,您是在比较引用是否相等。这意味着您正在比较对象的内存地址。这就是所谓的浅层比较。
当您使用.equals()时,您是在比较对象值本身是否相等。这意味着你正在检查‘两个对象对于相应的实例变量是否具有相同的值’。
来源:https://blog.webnersolutions.com/java-shallow-and-deep-comparison-of-objects/
https://stackoverflow.com/questions/63711225
复制相似问题