日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

当null检查非常失败时

發布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 当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()的方法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检查非常失败时的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。