C#中如何判断两个泛型<T>类型变量是否指向同一对象?
判断泛型变量是否指向同一对象
要判断两个泛型类型==运算符**即可——它专门用来比较引用类型的内存地址,完全不受泛型类型的影响。
示例代码实现
- 先定义Person类:
class Person { private String name; public Person(String name) { this.name = name; } // 可选:重写toString方便查看输出 @Override public String toString() { return "Person{name='" + name + "'}"; } }
- 测试泛型变量的引用相等性:
public class ReferenceCheckDemo { public static <T> boolean isSameObject(T variableA, T variableB) { return variableA == variableB; } public static void main(String[] args) { Person peter = new Person("Peter"); Person jack = new Person("Jack"); // 两个变量指向同一个对象 Person variableA = peter; Person variableB = peter; System.out.println(isSameObject(variableA, variableB)); // 输出 true // 两个变量指向不同对象 variableA = peter; variableB = jack; System.out.println(isSameObject(variableA, variableB)); // 输出 false } }
关键说明
- 泛型
在编译后会被类型擦除,运行时本质上都是Object类型的引用, ==运算符对所有引用类型的逻辑一致:比较两个变量是否指向堆内存中的同一个对象实例。 - 注意不要和
equals()方法混淆:equals()默认也是比较引用,但很多类会重写它来比较内容;而==始终是比较内存地址,正好符合你判断“是否指向同一个对象”的需求。
内容的提问来源于stack exchange,提问作者Ascyt
相关产品推荐
相关产品推荐

