diff --git a/src/main/java/com/android/tools/r8/graph/DexField.java b/src/main/java/com/android/tools/r8/graph/DexField.java
index 02cced2..939c529 100644
--- a/src/main/java/com/android/tools/r8/graph/DexField.java
+++ b/src/main/java/com/android/tools/r8/graph/DexField.java
@@ -22,6 +22,15 @@
 
 public class DexField extends DexMember<DexEncodedField, DexField> {
 
+  @SuppressWarnings("ReferenceEquality")
+  public static boolean identical(DexField t1, DexField t2) {
+    return t1 == t2;
+  }
+
+  public final boolean isIdenticalTo(DexField other) {
+    return identical(this, other);
+  }
+
   public final DexType type;
 
   DexField(DexType holder, DexType type, DexString name, boolean skipNameValidationForTesting) {
@@ -191,9 +200,8 @@
   }
 
   @Override
-  @SuppressWarnings("ReferenceEquality")
   public boolean match(DexField field) {
-    return field.name == name && field.type == type;
+    return name.isIdenticalTo(field.name) && type.isIdenticalTo(field.type);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/graph/DexMember.java b/src/main/java/com/android/tools/r8/graph/DexMember.java
index 635b48e..cd13cc7 100644
--- a/src/main/java/com/android/tools/r8/graph/DexMember.java
+++ b/src/main/java/com/android/tools/r8/graph/DexMember.java
@@ -9,6 +9,11 @@
 public abstract class DexMember<D extends DexEncodedMember<D, R>, R extends DexMember<D, R>>
     extends DexReference implements NamingLensComparable<R> {
 
+  @SuppressWarnings("ReferenceEquality")
+  public static boolean identical(DexMember<?, ?> t1, DexMember<?, ?> t2) {
+    return t1 == t2;
+  }
+
   public final DexType holder;
   public final DexString name;
 
diff --git a/src/main/java/com/android/tools/r8/graph/DexMethod.java b/src/main/java/com/android/tools/r8/graph/DexMethod.java
index 156bfb1..c4ee457 100644
--- a/src/main/java/com/android/tools/r8/graph/DexMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexMethod.java
@@ -22,6 +22,15 @@
 
 public class DexMethod extends DexMember<DexEncodedMethod, DexMethod> {
 
+  @SuppressWarnings("ReferenceEquality")
+  public static boolean identical(DexMethod t1, DexMethod t2) {
+    return t1 == t2;
+  }
+
+  public final boolean isIdenticalTo(DexMethod other) {
+    return identical(this, other);
+  }
+
   public final DexProto proto;
 
   DexMethod(DexType holder, DexProto proto, DexString name, boolean skipNameValidationForTesting) {
@@ -244,18 +253,16 @@
   }
 
   @Override
-  @SuppressWarnings("ReferenceEquality")
   public boolean match(DexMethod method) {
-    return method == this || match(method.getProto(), method.getName());
+    return isIdenticalTo(method) || match(method.getProto(), method.getName());
   }
 
   public boolean match(DexMethodSignature method) {
     return match(method.getProto(), method.getName());
   }
 
-  @SuppressWarnings("ReferenceEquality")
   public boolean match(DexProto methodProto, DexString methodName) {
-    return proto == methodProto && name == methodName;
+    return proto.isIdenticalTo(methodProto) && name.isIdenticalTo(methodName);
   }
 
   @Override
@@ -307,10 +314,9 @@
     return builder.append(")").toString();
   }
 
-  @SuppressWarnings("ReferenceEquality")
   public boolean isLambdaDeserializeMethod(DexItemFactory dexItemFactory) {
-    return name == dexItemFactory.deserializeLambdaMethodName
-        && proto == dexItemFactory.deserializeLambdaMethodProto;
+    return dexItemFactory.deserializeLambdaMethodName.isIdenticalTo(name)
+        && dexItemFactory.deserializeLambdaMethodProto.isIdenticalTo(proto);
   }
 
   public boolean isInstanceInitializer(DexItemFactory factory) {
diff --git a/src/main/java/com/android/tools/r8/graph/DexProto.java b/src/main/java/com/android/tools/r8/graph/DexProto.java
index c00c8ce..9721adc 100644
--- a/src/main/java/com/android/tools/r8/graph/DexProto.java
+++ b/src/main/java/com/android/tools/r8/graph/DexProto.java
@@ -17,6 +17,15 @@
 public class DexProto extends IndexedDexItem
     implements NamingLensComparable<DexProto>, LirConstant {
 
+  @SuppressWarnings("ReferenceEquality")
+  public static boolean identical(DexProto t1, DexProto t2) {
+    return t1 == t2;
+  }
+
+  public final boolean isIdenticalTo(DexProto other) {
+    return identical(this, other);
+  }
+
   public static final DexProto SENTINEL = new DexProto(null, null);
 
   public final DexType returnType;
diff --git a/src/main/java/com/android/tools/r8/graph/DexReference.java b/src/main/java/com/android/tools/r8/graph/DexReference.java
index 4f633d3..4f5dbfd 100644
--- a/src/main/java/com/android/tools/r8/graph/DexReference.java
+++ b/src/main/java/com/android/tools/r8/graph/DexReference.java
@@ -14,6 +14,11 @@
 /** A common interface for {@link DexType}, {@link DexField}, and {@link DexMethod}. */
 public abstract class DexReference extends IndexedDexItem implements LirConstant {
 
+  @SuppressWarnings("ReferenceEquality")
+  public static boolean identical(DexReference t1, DexReference t2) {
+    return t1 == t2;
+  }
+
   public abstract <T> T apply(
       Function<DexType, T> classConsumer,
       Function<DexField, T> fieldConsumer,
diff --git a/src/main/java/com/android/tools/r8/graph/DexString.java b/src/main/java/com/android/tools/r8/graph/DexString.java
index 24e13a6..95be1fa 100644
--- a/src/main/java/com/android/tools/r8/graph/DexString.java
+++ b/src/main/java/com/android/tools/r8/graph/DexString.java
@@ -21,6 +21,15 @@
 public class DexString extends IndexedDexItem
     implements NamingLensComparable<DexString>, LirConstant {
 
+  @SuppressWarnings("ReferenceEquality")
+  public static boolean identical(DexString t1, DexString t2) {
+    return t1 == t2;
+  }
+
+  public final boolean isIdenticalTo(DexString other) {
+    return identical(this, other);
+  }
+
   public static final DexString[] EMPTY_ARRAY = {};
   private static final int ARRAY_CHARACTER = '[';
 
diff --git a/src/main/java/com/android/tools/r8/graph/DexType.java b/src/main/java/com/android/tools/r8/graph/DexType.java
index 81f65e4..ecac370 100644
--- a/src/main/java/com/android/tools/r8/graph/DexType.java
+++ b/src/main/java/com/android/tools/r8/graph/DexType.java
@@ -30,6 +30,16 @@
 import java.util.function.Predicate;
 
 public class DexType extends DexReference implements NamingLensComparable<DexType> {
+
+  @SuppressWarnings("ReferenceEquality")
+  public static boolean identical(DexType t1, DexType t2) {
+    return t1 == t2;
+  }
+
+  public final boolean isIdenticalTo(DexType other) {
+    return identical(this, other);
+  }
+
   public static final DexType[] EMPTY_ARRAY = {};
 
   // Bundletool is merging classes that may originate from a build with an old version of R8.
@@ -325,10 +335,9 @@
     return descriptor.getFirstByteAsChar() == 'D';
   }
 
-  @SuppressWarnings("ReferenceEquality")
   public boolean isNullValueType() {
     boolean isNullValueType = descriptor.getFirstByteAsChar() == 'N';
-    assert !isNullValueType || this == DexItemFactory.nullValueType;
+    assert !isNullValueType || isIdenticalTo(DexItemFactory.nullValueType);
     return isNullValueType;
   }
 
