null导入失败_当null检查非常失败时
null導(dǎo)入失敗
免責(zé)聲明
在繼續(xù)之前,我必須指出,當(dāng)我們對Java進(jìn)行編程時,本文中描述的技術(shù)沒有實際目的。 就像填字游戲或拼圖。 它主要訓(xùn)練您的大腦進(jìn)行邏輯思維,可能發(fā)展您的Java語言知識甚至您的思維能力。 這就像魔術(shù)師執(zhí)行的把戲。 最后,您意識到什么都沒有。 切勿在現(xiàn)實生活的編程中做您可能需要應(yīng)用的技巧來解決此問題。
問題
最近,我讀了一篇描述調(diào)試情況的文章 :
if(trouble != null && !trouble.isEmpty()) {System.out.println(“fine here: ” + trouble);}else{System.out.println(“not so fine here: ” + trouble); }正在打印:
fine here: null實際的錯誤是字符串包含“ null”,也就是字符“ n”,“ u”,“ l”和“ l”。 在現(xiàn)實生活中可能會發(fā)生,特別是當(dāng)您在不檢查變量的空值的情況下連接字符串時。
然后我開始考慮其他類似的奇怪代碼和調(diào)試情況。 我是否可以使變量不僅是帶有這些字符的“空”字符串,還是真正為空? 好像瘋了嗎? 看一下代碼:
package com.javax0.blog.nullisnotnull;public class NullIsNotNull {public static void troubled(){String trouble = new String("hallo");Object z = trouble != null && !trouble.toString().isEmpty() ? trouble.toString() : "";if (z == null) {System.out.println("z is really " + z + "?");}} }它會打印出:
z is really null?題。 事實是,您可以創(chuàng)建一個包含public static void main()的Java類,以便在main()調(diào)用troubled()方法時將該類作為Java應(yīng)用程序開始打印。 換句話說:我確實調(diào)用了troubled()方法,解決方案不是main()打印句子。
在這種情況下,變量z不僅打印為“ null”,而且實際上為null。
提示
解決方案不應(yīng)涉及
- 反射
- 字節(jié)碼操作
- 打電話給JNI
- 特種裝載機
- Java代理
- 注釋處理器
這些工具太重了。 您不需要這種軍械庫。
提示#1
如果我更改代碼,使變量z為String它甚至不會編譯:
這就是我在Eclipse中看到的
如果它使您更加困惑,那就對不起。 繼續(xù)閱讀!
提示2
在Java語言中, String是標(biāo)識符而不是關(guān)鍵字。 Java語言規(guī)范 3.9節(jié)可能會提供有關(guān)此重要性的更多信息。
提示3
類Object中的toString()方法具有返回類型java.lang.String 。 您可能需要閱讀我的文章 ,其中涉及類的名稱,簡單名稱和規(guī)范名稱之間的區(qū)別。 這可能會有所啟發(fā),并增加文章的點擊數(shù)。
提示#4
要使用在同一程序包中聲明的類,無需導(dǎo)入該程序包。
解
解決方案是在同一包中創(chuàng)建一個名為String的類。 在這種情況下,編譯器將使用此類而不是java.lang.String 。 代碼中的三元運算符是簡單的魔術(shù)師技巧。 從重點出發(fā),有些事情會引起您的注意。 要點是,上述代碼中的String不是java.lang.String 。 如果仍然找不到如何創(chuàng)建把戲類的方法,請單擊折疊的源代碼塊以全面了解它:
package com.javax0.blog.nullisnotnull;class String {private java.lang.String jString;private boolean first = true;public String(java.lang.String s) {jString = s;}public boolean isEmpty() {return jString.isEmpty();}@Overridepublic java.lang.String toString() {if( first ){first = false;return jString;}return null;}public static void main(java.lang.String[] args) {NullIsNotNull.troubled();} }翻譯自: https://www.javacodegeeks.com/2014/11/when-null-checking-miserably-fails.html
null導(dǎo)入失敗
總結(jié)
以上是生活随笔為你收集整理的null导入失败_当null检查非常失败时的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javaone_代理的JavaOne 2
- 下一篇: di容器_DI容器是代码污染者