Java 创建实例是否与声明变量完全相同?

Java 创建实例是否与声明变量完全相同?,java,android,Java,Android,我知道在Java中,作为一种强类型语言,每个变量都应该声明 另一方面,Java是一种面向对象的语言,必须从每个变量生成一个实例。(为变量分配内存) 这里有一个我们没有声明的代码ArrayAdapter @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setListAdapter(new ArrayAdap

我知道在Java中,作为一种强类型语言,每个变量都应该声明

另一方面,Java是一种面向对象的语言,必须从每个变量生成一个实例。(为变量分配内存)

这里有一个我们没有声明的代码
ArrayAdapter

@Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, presidents));
    }
@覆盖
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setListAdapter(新的ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,presidents));
}

我的问题是:创建实例是否与在这里声明变量完全一样?

代码中的部分如下所示:

new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, presidents)
new ArrayAdapter(getActivity(),android.R.layout.simple\u list\u item\u 1,总统)
“声明”一个变量的实例,但是您的应用程序没有保留对它的引用。您也可以这样做:

    ArrayAdapter<String> myArrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, presidents);
    setListAdapter(myArrayAdapter);
ArrayAdapter myArrayAdapter=newarrayadapter(getActivity(),android.R.layout.simple\u list\u item\u 1,总统);
setListAdapter(myArrayAdapter);

然后它将被声明和引用以备将来使用。

在Java中,只有在需要存储对对象的引用时才声明变量。这是可选的,例如

但在这种情况下没有真正的优势。

这一行:

setListAdapter(new ArrayAdapter<String>(...));

<> P> >我希望从这个例子中可以看出,声明变量与创建实例不同。

< P>这是一个很好的问题,因为它指出了java和C++之间最显著的区别之一,也是程序员从这些语言中转换到另一种语言的最大障碍之一。 在C++中,可以通过声明变量来创建对象。也就是说,如果您声明了对象类型的变量(而不是引用变量),那么当执行到达变量声明时,将创建一个对象;当变量超出范围时,对象将被销毁

Java不是这样工作的——变量独立于它们引用的对象而存在。如果您声明了一个对象类型的变量,并且没有为它指定要引用的对象,那么它最初将为null(如果它是类的成员),或者编译器将强制您在使用它之前初始化它(如果它是局部变量)。但关键是,即使没有对象,变量也可以在范围内

此外,即使没有变量引用对象,也可以创建对象。这样的对象通常是短暂的,因为如果在任何地方都没有对对象的引用,垃圾收集器将以其邪恶的方式处理对象


<>如果你来自C++背景,你正在向java过渡,花很多时间来理解这个区别是值得的。很多基本错误的产生是因为人们没有完全理解它。

你认为新的<代码>有什么作用?实例与OO无关,我仍在努力解决它@Raghunandan@JaneGoodall我只是暗示一下
@Override
public void onCreate(Bundle savedInstanceState) 
{
  super.onCreate(savedInstanceState);
  ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), 
      android.R.layout.simple_list_item_1, presidents);
  setListAdapter(adapter);
}
setListAdapter(new ArrayAdapter<String>(...));
// declare variable
ArrayAdapter adapter;
// initialize (create an instance and assign it to the declared variable)
adapter = new ArrayAdapter<String>(...);
// pass reference
setListAdapter(adapter);