2016-12-06 96 views
-3
MessageDigest md = null; 
md = MessageDigest.getInstance(MESSAGE_DIGEST_ALGORITHM); 
md.update(saltBytes); 
md.update(passwordBytes); 
byte[] digest = md.digest(); 

就像上面,「消息摘要MD =空」,什麼是代碼的含義? 我認爲「MessageDigest md = MessageDigest.getInstance(MESSAGE_DIGEST_ALGORITHM);」更好。爲什麼總是使用object = null?

爲什麼?有這麼多的代碼,只是因爲歷史?

+0

是的,執行'MessageDigest md = MessageDigest.getInstance(MESSAGE_DIGEST_ALGORITHM);'。做'MessageDigest md = null;'首先是不必要的。 – marstran

+2

是的,在這種情況下,這條線是無用的。可能是一個馬虎或新手程序員,或者是開發人員忘記合併這兩條線的快速重構。 –

+2

它不是'一直使用'。只有在寫得不好的代碼中。不要模仿。 – EJP

回答

3

爲什麼對象= NULL總是使用?

不是 「始終使用」。事實上,像這樣的東西很少/從來沒有寫在良好的書面/審查代碼。

因爲......

MessageDigest md = null; 
md = MessageDigest.getInstance(MESSAGE_DIGEST_ALGORITHM); 

直接相當於

MessageDigest md = MessageDigest.getInstance(MESSAGE_DIGEST_ALGORITHM); 

爲什麼[千萬人做]

沒有很好的理由。

有很多代碼就是這樣,只是因爲歷史?

可能。

而且,可能是因爲:

  • 作者是不是一個好的Java程序員......或
  • 筆者很着急,還是沒人理......或
  • 代碼已被重構使用(而非愚蠢的)自動工具,並沒有整理...或
  • 代碼起源於反編譯器生成的東西。

肯定知道的唯一方法是問筆者。如果你使用一些條件語句

+0

當代碼被重構時經常發生。像這樣的小東西可能會溜走。 – marstran

+0

@marstran我已經完成了我的代碼重構但沒有看到類似的東西。 – EJP

+0

@EJP我也做了相當數量的重構,我已經看過幾次了。例如,有人可能會找到一個不必要的包含初始化代碼的if-test,將其刪除,然後忘記清理初始化。 – marstran

0

空分配是必要的,你不能只寫

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

你有一定的價值明確分配給您的md變量。在這種情況下,經常使用null。

然而,在你的例子中,它是絕對無用的。只需編寫

MessageDigest md = MessageDigest.getInstance(MESSAGE_DIGEST_ALGORITHM); 
0

爲什麼會出現這樣的代碼?因爲很多人不知道他們的編程語言的基本模式。

爲什麼人們不知道更好?因爲沒有人經常教他們。 (好吧,除了IntelliJ,IDE是面向高級開發人員的。)

爲什麼沒有人告訴他們?也許是因爲他們的同事也不太瞭解它。

也有人記錄他們的getter和setter方法(「返回名稱。@返回名稱」)。它也差不多。

相關問題