Node<T> node1;
Node<T> node2 = new Node();
node1.add(T element);//// 1
node2.add(T element); /// 2
// i want to know the differnece between 1 and 2
// @1 method invocation is through variable of class type Node
// @2 method invocation is through object reference.
答案 0 :(得分:1)
首先,让我们修复最大的语法错误:
Node<T> node1;
Node<T> node2 = new Node<T>();
// ^^^---- added type parameter
node1.add(element); /// 1
// ^-------------------- no T here
node2.add(element); /// 2
// ^-------------------- or here
调用(对add
的调用)完全没有区别。唯一的区别是,您将收到#1的编译器错误,因为您尚未向node1
分配任何内容。 javac编译器非常智能,可以检测未初始化的变量。 (现在,如果这些是类中的实例字段,node1
将以值null
开始,并且您将获得运行时错误[a NullPointerException
] ,除非 add
是static
方法。)
@ 1方法调用是通过类类型Node的变量
这大多是正确的,变量的类型是Node<T>
,而不仅仅是Node
。对于@ 2也是如此。
@ 2方法调用是通过对象引用
这也是正确的。对于@ 1也是如此。类型为Node<T>
的变量包含一个对象引用(假设您将其初始化为null
以外的其他内容)。调用是通过该引用。
答案 1 :(得分:0)
Node1只是一个没有指向内存中任何内容的引用。 Node2是指向由新Node()
创建的节点的引用