当我在Java中声明它时,我应该为变量赋值吗?

Rom*_*man 2 java variables types object variable-assignment

我有一个代码,其代码如下:

Socket echoSocket = null;
... something ...
echoSocket = new Socket("taranis", 7);
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我们想要第一线.我知道Java无法从其值中定义变量的类型.这就是为什么首先我们需要告诉echoSocket是具有Socket类型的变量(第一行),而且我们认为echoSocket具有一定的值(类Socket的对象).

但我不明白为什么我们需要分配两次值?为什么我们要说echoSocket等于null?

cle*_*tus 5

我使用的一般原则是:尽可能晚地声明变量.

但是,有一个非常有用的情况是不初始化变量:

String someString;
if (/* some condition */) {
  someString = "foo";
} else {
  someString = "bar";
}
Run Code Online (Sandbox Code Playgroud)

因为someString,如果该else子句没有设置值,Java编译器会抱怨单位化值,因此在声明时是单元化的.如果你这样做,情况就不是这样了:

String someString = null;
if (/* some condition */) {
  someString = "foo";
} else {
  // do nothing
}
Run Code Online (Sandbox Code Playgroud)

这是一个很好的理智检查.以上不是编译错误,但这是:

String someString;
if (/* some condition */) {
  someString = "foo";
} else {
  // do nothing
}
Run Code Online (Sandbox Code Playgroud)