From e40469057483c6b3ce9cf69af12dd19a68392cfd Mon Sep 17 00:00:00 2001 From: Nikolay Fedorovskikh Date: Fri, 8 Sep 2017 00:39:32 +0500 Subject: [PATCH] Optimize DefaultChannelId.equals Motivation: A `DefaultChannelId` has final `hashCode` field calculated in the constructor. We can use it in `equals` to the fast return for different objects. Modifications: Use `hashCode` field in `DefaultChannelId.equals()`. Result: Fast `equals` on negative scenarios. --- .../src/main/java/io/netty/channel/DefaultChannelId.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/transport/src/main/java/io/netty/channel/DefaultChannelId.java b/transport/src/main/java/io/netty/channel/DefaultChannelId.java index 96a4e22bfc..7f24072c02 100644 --- a/transport/src/main/java/io/netty/channel/DefaultChannelId.java +++ b/transport/src/main/java/io/netty/channel/DefaultChannelId.java @@ -274,7 +274,14 @@ public final class DefaultChannelId implements ChannelId { @Override public boolean equals(Object obj) { - return this == obj || (obj instanceof DefaultChannelId && Arrays.equals(data, ((DefaultChannelId) obj).data)); + if (this == obj) { + return true; + } + if (!(obj instanceof DefaultChannelId)) { + return false; + } + DefaultChannelId other = (DefaultChannelId) obj; + return hashCode == other.hashCode && Arrays.equals(data, other.data); } @Override