if (this == &other) { return *this; } 这步是判断啥?
时间: 2024-05-31 22:13:08 浏览: 74
这是在C++中实现的赋值运算符重载函数中的一部分,用于检查自我赋值并避免出现问题。在这个条件语句中,"this"是指向当前对象的指针,"&other"是指向传递给函数的另一个对象的指针。如果这两个指针所指向的对象是同一个对象,那么说明这是自我赋值,这时候直接返回*this即可,避免出现错误。否则,可以继续进行赋值操作。
相关问题
@Override public boolean equals(Object that) { if (this == that) { return true; } if (that == null) { return false; } if (getClass() != that.getClass()) { return false; } ApartmentAdmin other = (ApartmentAdmin) that; return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) && (this.getUserName() == null ? other.getUserName() == null : this.getUserName().equals(other.getUserName())) && (this.getPassword() == null ? other.getPassword() == null : this.getPassword().equals(other.getPassword())) && (this.getRoleId() == null ? other.getRoleId() == null : this.getRoleId().equals(other.getRoleId())) && (this.getHeadimg() == null ? other.getHeadimg() == null : this.getHeadimg().equals(other.getHeadimg())) && (this.getPhone() == null ? other.getPhone() == null : this.getPhone().equals(other.getPhone())) && (this.getSex() == null ? other.getSex() == null : this.getSex().equals(other.getSex())) && (this.getBuildingNo() == null ? other.getBuildingNo() == null : this.getBuildingNo().equals(other.getBuildingNo())) && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime())) && (this.getIsLock() == null ? other.getIsLock() == null : this.getIsLock().equals(other.getIsLock())); }请详细解释每一行代码
这是一个Java类中的重写 equals 方法,用于比较两个对象是否相等。具体解释如下:
1. 第一行 @Override 注解表示该方法是重写了父类的 equals 方法。
2. 第二行开始是方法的定义,public 表示该方法是公共的,可以被其他类访问和调用;boolean 表示该方法返回一个布尔类型的值,即判断两个对象是否相等,返回true表示相等,返回false表示不相等。
3. 参数 Object that 表示传入该方法的对象,Object 是 Java 中所有类的父类,因此该方法可以接收任何类型的对象作为参数。
4. 第四行 if (this == that) 判断传入的对象是否与当前对象相同,如果是,则直接返回 true,表示两个对象相等。
5. 第五行 if (that == null) 判断传入的对象是否为 null,如果是,则直接返回 false,表示两个对象不相等。
6. 第六行 if (getClass() != that.getClass()) 判断传入的对象是否属于当前对象所属的类,如果不是,则直接返回 false,表示两个对象不相等。
7. 第七行到第十四行是比较两个对象中的属性是否相等,如果相等,则返回 true,否则返回 false。其中使用了三元运算符,如果属性为 null,则需要使用 equals 方法进行判断,而不能直接使用 == 进行判断。
8. 最后,该方法判断的属性包括:id、用户名、密码、角色id、头像、电话、性别、楼号、创建时间、是否锁定。
这段函数代表什么 public int compareTo(WindowContainer other) { Slog.d("huangbg", Log.getStackTraceString( new Throwable())); Slog.d("huangbg","other = " + other); if (this == other) { Slog.d("huangbg"," compareTo 929"); return 0; } Slog.d("huangbg"," mParent = " + mParent); if (mParent != null && mParent == other.mParent) { Slog.d("huangbg"," compareTo 934"); final WindowList<WindowContainer> list = mParent.mChildren; return list.indexOf(this) > list.indexOf(other) ? 1 : -1; } final LinkedList<WindowContainer> thisParentChain = mTmpChain1; final LinkedList<WindowContainer> otherParentChain = mTmpChain2; try { getParents(thisParentChain); other.getParents(otherParentChain); // Find the common ancestor of both containers. WindowContainer commonAncestor = null; WindowContainer thisTop = thisParentChain.peekLast(); WindowContainer otherTop = otherParentChain.peekLast(); while (thisTop != null && otherTop != null && thisTop == otherTop) { commonAncestor = thisParentChain.removeLast(); otherParentChain.removeLast(); thisTop = thisParentChain.peekLast(); otherTop = otherParentChain.peekLast(); } Slog.d("huangbg"," commonAncestor = " + commonAncestor); // Containers don't belong to the same hierarchy??? if (commonAncestor == null) { throw new IllegalArgumentException("No in the same hierarchy this=" + thisParentChain + " other=" + otherParentChain); } // Children are always considered greater than their parents, so if one of the containers // we are comparing it the parent of the other then whichever is the child is greater. if (commonAncestor == this) { Slog.d("huangbg"," compareTo 965"); return -1; } else if (commonAncestor == other) { Slog.d("huangbg"," compareTo 968"); return 1; } Slog.d("huangbg"," compareTo 971"); // The position of the first non-common ancestor in the common ancestor list determines // which is greater the which. final WindowList<WindowContainer> list = commonAncestor.mChildren; return list.indexOf(thisParentChain.peekLast()) > list.indexOf(otherParentChain.peekLast()) ? 1 : -1; } finally { mTmpChain1.clear(); mTmpChain2.clear(); } }
这段代码是一个比较函数,它重写了 Java 中的 Comparable 接口中的 compareTo 方法。它的作用是用于比较两个 WindowContainer 对象的大小。在代码中,首先使用了 Slog.d() 方法输出了一些日志,用于调试。然后比较了 this 和 other 两个对象是否相等,如果相等,返回 0;否则返回其他值。
阅读全文