五皇后问题 java_Java的5个古怪问题
五皇后問題 java
我們有機會接觸到一些最奇怪的Java難題
即使是最有經驗的Java開發人員,也會在這篇文章中發現令人困惑的問題。 或者至少是有趣的(絕對不公平)。 在經歷了Java Deathmatch冒險之后,我們決定這次發布一系列不同的問題,著重強調您可以使用Java進行的一些不尋常且古怪的事情。 對于我們之前的測驗結果,您可以查看這篇文章 ,看看是否可以解決5個開發人員中有4個出錯的問題。
在家中(或辦公室)嘗試一下。 但是,請不要在現實的Java應用程序中使用它! 除非您試圖誘騙某個人,否則一切都會順利進行。 非常感謝Peter Lawrey與我們分享了大多數這些問題。 解決方案可在本文的底部找到,但請嘗試誠實地嘗試一下,看看您能解釋多少。
問題是……
1.右括號被高估了
奇怪的是,下面的代碼可以完美地編譯。 但是它打印什么?
import static java.lang.Character.getNumericValue;public class BigCharacters {public static void main(String... a?) {for (char c? = 1; c? > 0; c?++)if (getNumericValue(c?) > 50)System.out.println(c? + ": " + getNumericValue(c?));} }注意: getNumbericValue返回Unicode字符表示的數字int值。 如果字符沒有數字值,則返回-1。
2.生命,宇宙和一切的答案
ew 我們在這個問題上有一個右括號。 但是,以下代碼段輸出了什么? 又為什么呢
Integer a = 42; Integer b = 42; System.out.println(a == b); Integer c = 666; Integer d = 666; System.out.println(c == d);3.字符運算
繼續。 您能解釋一下這里發生了什么嗎?
char ch = '0'; ch *= 1.1; System.out.println(ch);可能的選擇:
- 編譯器錯誤
- 運行時錯誤
- 列印0
- 版畫4
4.不要放棄!
這就是這個世界。 這里發生了什么?
String _? = "Hello "; String _? = "World"; String _?? = " !!"; System.out.println(_?+_?+_??);劇透警告:它打印出“ Hello World !!”
ˉ\ _(ツ)_ /ˉ
5.這個問題是自我意識的
打印WTF的最小值是多少? x的類型取決于您。
if (x != (x += 0.0f))?System.out.println("WTF");解決方案
1.右括號被高估了
首先,一些背景。 有一個用\ u202e編碼的字符,該字符用于從右到左的語言,如希伯來語或阿拉伯語,并使其余的行以相反的順序顯示。 這是一個零寬度的字符,不僅如此,而且用作Java標識符也是有效的。 嘗試復制代碼段,在光標周圍移動,然后您會注意到它在代碼中的顯示位置。
除了RTL語言支持之外,如果您想對某人惡作劇,它也非常有用。 將封閉括號替換為后面帶有該字符的開放括號以反轉該行的其余部分–然后查看接下來會發生什么。 如果您決定這樣做,請向我們發送受害者面部的照片。 :)
2.生命,宇宙和一切的答案
整數是對象,這與原始類型的整數相反。 但是,此代碼段:
Integer a = 42; Integer b = 42; System.out.println(a == b); Integer c = 666; Integer d = 666; System.out.println(c == d);打印出第一個比較結果為“ true”,下一個為“ false”。 這對于int無效,但是由于Integer是獨立的對象,因此c和d不是同一對象是有意義的。 但是為什么a == b?
出于性能原因,Integer類型保留所有對象的緩存,其值在-128到127范圍內。 因此,當您在該范圍內聲明新變量時,實際上是在指同一對象。
3.字符運算
此代碼段顯示了4:
char ch = '0'; // ASCII for ‘0’ is 48 ch *= 1.1; // 48 x 1.1 is 52.8 which turns to 52 when cast to char System.out.println(ch); // 52 represents ‘4’ in ASCII4.不要放棄!
_,_和_為什么是不同的變量? 您可能已經猜對了。 答案是使用隱藏的字符作為合法的Java標識符傳遞。 您可以在此處直接在Peter Lawrey的博客上閱讀有關它的更多信息。
5.這個問題是自我意識的
那么,什么使該表達式被評估為真呢?
if (x != (x += 0.0f)) System.out.println("WTF");您可以使用任何String,并且(1 << 24)+ 1的int或long可以作為這些類型的最小值。 但是它們所有的最小值是Double.MIN_VALUE,當轉換為浮點數時會四舍五入為0.0f。
最后的想法
希望您喜歡這些問題! 但是,如果您發現自己的代碼庫中的困惑者花費了太多時間,那可能就不理想了。 對于這種情況,我們已經為Java構建了Takipi 。 Takipi是一個Java代理,它收集解決生產錯誤所需的所有數據-無需遍歷日志文件并嘗試重新創建導致錯誤的狀態。 它使您可以查看導致錯誤的變量值(遍及整個堆棧),并將其覆蓋在代碼中。
翻譯自: https://www.javacodegeeks.com/2015/10/5-weird-java-questions-that-will-make-your-head-spin.html
五皇后問題 java
總結
以上是生活随笔為你收集整理的五皇后问题 java_Java的5个古怪问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: log4j2 无日志记录_在Log4j2
- 下一篇: 视频太大怎么压缩电脑视频太大怎么压缩