日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

五皇后问题 java_Java的5个古怪问题

發(fā)布時(shí)間:2023/12/3 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 五皇后问题 java_Java的5个古怪问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

五皇后問題 java

我們有機(jī)會(huì)接觸到一些最奇怪的Java難題

即使是最有經(jīng)驗(yàn)的Java開發(fā)人員,也會(huì)在這篇文章中發(fā)現(xiàn)令人困惑的問題。 或者至少是有趣的(絕對不公平)。 在經(jīng)歷了Java Deathmatch冒險(xiǎn)之后,我們決定這次發(fā)布一系列不同的問題,著重強(qiáng)調(diào)您可以使用Java進(jìn)行的一些不尋常且古怪的事情。 對于我們之前的測驗(yàn)結(jié)果,您可以查看這篇文章 ,看看是否可以解決5個(gè)開發(fā)人員中有4個(gè)出錯(cuò)的問題。

在家中(或辦公室)嘗試一下。 但是,請不要在現(xiàn)實(shí)的Java應(yīng)用程序中使用它! 除非您試圖誘騙某個(gè)人,否則一切都會(huì)順利進(jìn)行。 非常感謝Peter Lawrey與我們分享了大多數(shù)這些問題。 解決方案可在本文的底部找到,但請嘗試誠實(shí)地嘗試一下,看看您能解釋多少。

問題是……

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字符表示的數(shù)字int值。 如果字符沒有數(shù)字值,則返回-1。

2.生命,宇宙和一切的答案

ew 我們在這個(gè)問題上有一個(gè)右括號。 但是,以下代碼段輸出了什么? 又為什么呢

Integer a = 42; Integer b = 42; System.out.println(a == b); Integer c = 666; Integer d = 666; System.out.println(c == d);

3.字符運(yùn)算

繼續(xù)。 您能解釋一下這里發(fā)生了什么嗎?

char ch = '0'; ch *= 1.1; System.out.println(ch);

可能的選擇:

  • 編譯器錯(cuò)誤
  • 運(yùn)行時(shí)錯(cuò)誤
  • 列印0
  • 版畫4

4.不要放棄!

這就是這個(gè)世界。 這里發(fā)生了什么?

String _? = "Hello "; String _? = "World"; String _?? = " !!"; System.out.println(_?+_?+_??);

劇透警告:它打印出“ Hello World !!”

ˉ\ _(ツ)_ /ˉ

5.這個(gè)問題是自我意識的

打印WTF的最小值是多少? x的類型取決于您。

if (x != (x += 0.0f))?System.out.println("WTF");

解決方案

1.右括號被高估了

首先,一些背景。 有一個(gè)用\ u202e編碼的字符,該字符用于從右到左的語言,如希伯來語或阿拉伯語,并使其余的行以相反的順序顯示。 這是一個(gè)零寬度的字符,不僅如此,而且用作Java標(biāo)識符也是有效的。 嘗試復(fù)制代碼段,在光標(biāo)周圍移動(dòng),然后您會(huì)注意到它在代碼中的顯示位置。

除了RTL語言支持之外,如果您想對某人惡作劇,它也非常有用。 將封閉括號替換為后面帶有該字符的開放括號以反轉(zhuǎn)該行的其余部分–然后查看接下來會(huì)發(fā)生什么。 如果您決定這樣做,請向我們發(fā)送受害者面部的照片。 :)

2.生命,宇宙和一切的答案

整數(shù)是對象,這與原始類型的整數(shù)相反。 但是,此代碼段:

Integer a = 42; Integer b = 42; System.out.println(a == b); Integer c = 666; Integer d = 666; System.out.println(c == d);

打印出第一個(gè)比較結(jié)果為“ true”,下一個(gè)為“ false”。 這對于int無效,但是由于Integer是獨(dú)立的對象,因此c和d不是同一對象是有意義的。 但是為什么a == b?

出于性能原因,Integer類型保留所有對象的緩存,其值在-128到127范圍內(nèi)。 因此,當(dāng)您在該范圍內(nèi)聲明新變量時(shí),實(shí)際上是在指同一對象。

3.字符運(yùn)算

此代碼段顯示了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 ASCII

4.不要放棄!

_,_和_為什么是不同的變量? 您可能已經(jīng)猜對了。 答案是使用隱藏的字符作為合法的Java標(biāo)識符傳遞。 您可以在此處直接在Peter Lawrey的博客上閱讀有關(guān)它的更多信息。

5.這個(gè)問題是自我意識的

那么,什么使該表達(dá)式被評估為真呢?

if (x != (x += 0.0f)) System.out.println("WTF");

您可以使用任何String,并且(1 << 24)+ 1的int或long可以作為這些類型的最小值。 但是它們所有的最小值是Double.MIN_VALUE,當(dāng)轉(zhuǎn)換為浮點(diǎn)數(shù)時(shí)會(huì)四舍五入為0.0f。

最后的想法

希望您喜歡這些問題! 但是,如果您發(fā)現(xiàn)自己的代碼庫中的困惑者花費(fèi)了太多時(shí)間,那可能就不理想了。 對于這種情況,我們已經(jīng)為Java構(gòu)建了Takipi 。 Takipi是一個(gè)Java代理,它收集解決生產(chǎn)錯(cuò)誤所需的所有數(shù)據(jù)-無需遍歷日志文件并嘗試重新創(chuàng)建導(dǎo)致錯(cuò)誤的狀態(tài)。 它使您可以查看導(dǎo)致錯(cuò)誤的變量值(遍及整個(gè)堆棧),并將其覆蓋在代碼中。

翻譯自: https://www.javacodegeeks.com/2015/10/5-weird-java-questions-that-will-make-your-head-spin.html

五皇后問題 java

總結(jié)

以上是生活随笔為你收集整理的五皇后问题 java_Java的5个古怪问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。