null导入失败_当null检查非常失败时
null導入失敗
免責聲明
在繼續之前,我必須指出,當我們對Java進行編程時,本文中描述的技術沒有實際目的。 就像填字游戲或拼圖。 它主要訓練您的大腦進行邏輯思維,可能發展您的Java語言知識甚至您的思維能力。 這就像魔術師執行的把戲。 最后,您意識到什么都沒有。 切勿在現實生活的編程中做您可能需要應用的技巧來解決此問題。
問題
最近,我讀了一篇描述調試情況的文章 :
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”。 在現實生活中可能會發生,特別是當您在不檢查變量的空值的情況下連接字符串時。
然后我開始考慮其他類似的奇怪代碼和調試情況。 我是否可以使變量不僅是帶有這些字符的“空”字符串,還是真正為空? 好像瘋了嗎? 看一下代碼:
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?題。 事實是,您可以創建一個包含public static void main()的Java類,以便在main()調用troubled()方法時將該類作為Java應用程序開始打印。 換句話說:我確實調用了troubled()方法,解決方案不是main()打印句子。
在這種情況下,變量z不僅打印為“ null”,而且實際上為null。
提示
解決方案不應涉及
- 反射
- 字節碼操作
- 打電話給JNI
- 特種裝載機
- Java代理
- 注釋處理器
這些工具太重了。 您不需要這種軍械庫。
提示#1
如果我更改代碼,使變量z為String它甚至不會編譯:
這就是我在Eclipse中看到的
如果它使您更加困惑,那就對不起。 繼續閱讀!
提示2
在Java語言中, String是標識符而不是關鍵字。 Java語言規范 3.9節可能會提供有關此重要性的更多信息。
提示3
類Object中的toString()方法具有返回類型java.lang.String 。 您可能需要閱讀我的文章 ,其中涉及類的名稱,簡單名稱和規范名稱之間的區別。 這可能會有所啟發,并增加文章的點擊數。
提示#4
要使用在同一程序包中聲明的類,無需導入該程序包。
解
解決方案是在同一包中創建一個名為String的類。 在這種情況下,編譯器將使用此類而不是java.lang.String 。 代碼中的三元運算符是簡單的魔術師技巧。 從重點出發,有些事情會引起您的注意。 要點是,上述代碼中的String不是java.lang.String 。 如果仍然找不到如何創建把戲類的方法,請單擊折疊的源代碼塊以全面了解它:
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導入失敗
總結
以上是生活随笔為你收集整理的null导入失败_当null检查非常失败时的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javaone_代理的JavaOne 2
- 下一篇: rhq监控软件_RHQ指标的WildFl