Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么总是使用object=null?_Java - Fatal编程技术网

Java 为什么总是使用object=null?

Java 为什么总是使用object=null?,java,Java,正如上面所说,“MessageDigest md=null”,代码的含义是什么? 我认为MessageDigest md=MessageDigest.getInstanceMESSAGE\u DIGEST\u算法;这样更好 为什么??有很多这样的代码,仅仅是因为历史 为什么总是使用object=null 它并不总是被使用。事实上,像这样的东西很少/从未出现在编写良好/经过审查的代码中 因为 MessageDigest md = null; md = MessageDigest.getInstan

正如上面所说,“MessageDigest md=null”,代码的含义是什么? 我认为MessageDigest md=MessageDigest.getInstanceMESSAGE\u DIGEST\u算法;这样更好

为什么??有很多这样的代码,仅仅是因为历史

为什么总是使用object=null

它并不总是被使用。事实上,像这样的东西很少/从未出现在编写良好/经过审查的代码中

因为

MessageDigest md = null;
md = MessageDigest.getInstance(MESSAGE_DIGEST_ALGORITHM);
md.update(saltBytes);
md.update(passwordBytes);
byte[] digest = md.digest();
直接等同于

MessageDigest md = null;
md = MessageDigest.getInstance(MESSAGE_DIGEST_ALGORITHM);
为什么人们会这样做

没有充分的理由

有很多这样的代码,仅仅是因为历史

可能吧

还有,可能是因为:

作者不是一个好的Java程序员。。。或 作者很匆忙或者根本不在乎。。。或 代码已经用一个相当愚蠢的自动工具进行了重构,没有整理。。。或 代码源于反编译器生成的某些内容。
唯一确定答案的方法是询问作者。

如果你使用了一些条件语句,空赋值是必要的,你不能只写

MessageDigest md = MessageDigest.getInstance(MESSAGE_DIGEST_ALGORITHM);
您必须显式地为md变量赋值。在这种情况下经常使用null

然而,在你的例子中,它是完全无用的。只要写

    MessageDigest md;
    if (/*something*/) {
        md = MessageDigest.getInstance(MESSAGE_DIGEST_ALGORITHM); 
    }

为什么会有这样的代码?因为许多人不知道他们编程语言的基本模式

为什么人们不更清楚呢?因为没有人经常教他们。好吧,除了IntelliJ,但IDE面向高级开发人员

为什么没有人告诉他们?也许是因为他们的同事也不太清楚


也有人记录他们的getter和setter方法返回的名称@返回名称。大致相同。

是的,执行MessageDigest md=MessageDigest.getInstanceMESSAGE\u DIGEST\u算法;。正在执行MessageDigest md=null;第一个是不必要的。是的,在这种情况下,这一行是无用的。可能是一个草率的或新手程序员,或者是一个快速的重构,开发人员忘记了合并这两行代码。只有在写得很差的代码中。不要模仿。我投票结束这个问题作为离题,因为它问为什么总是这样做?在这种情况下,第二行和后续行可能在try块中,并且在try块之后使用md的值。这通常发生在代码重构时。像这样的小东西可能会漏掉。@marstran我做过我那份代码重构,但没有看到类似的东西。@EJP我也做过相当多的重构,我已经看过好几次了。例如,有人可能会发现一个不必要的if测试包含一些初始化代码,将其删除,然后忘记整理初始化。
    MessageDigest md = MessageDigest.getInstance(MESSAGE_DIGEST_ALGORITHM);