我想知道这两个方法调用之间的区别吗?

时间:2016-05-26 07:41:04

标签: java

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.

2 个答案:

答案 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] ,除非 addstatic方法。)

  

@ 1方法调用是通过类类型Node的变量

这大多是正确的,变量的类型是Node<T>,而不仅仅是Node。对于@ 2也是如此。

  

@ 2方法调用是通过对象引用

这也是正确的。对于@ 1也是如此。类型为Node<T>的变量包含一个对象引用(假设您将其初始化为null以外的其他内容)。调用是通过该引用。

答案 1 :(得分:0)

Node1只是一个没有指向内存中任何内容的引用。 Node2是指向由新Node()

创建的节点的引用