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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

Java的5个古怪问题

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

我們有機(jī)會(huì)嘗試了一些最奇怪的Java難題

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

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

問(wèn)題是……

1.右括號(hào)被高估了

奇怪的是,下面的代碼可以完美地編譯。 但是它打印什么?

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值。 如果字符沒(méi)有數(shù)字值,則返回-1。

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

ew 我們?cè)谶@個(gè)問(wèn)題上有一個(gè)右括號(hào)。 但是下面的代碼片段輸出了什么? 又為什么呢

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è)問(wèn)題是自我意識(shí)的

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

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

解決方案

1.右括號(hào)被高估了

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

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

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

整數(shù)是對(duì)象,這與原始類型的整數(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è)比較結(jié)果為“ false”。 這對(duì)于int無(wú)效,但是由于Integer是獨(dú)立的對(duì)象,因此c和d不是同一對(duì)象是有意義的。 但是為什么a == b?

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

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)猜對(duì)了。 答案是使用隱藏的字符作為合法的Java標(biāo)識(shí)符傳遞。 您可以在此處在Peter Lawrey的博客上閱讀有關(guān)它的更多信息。

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

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

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í)會(huì)四舍五入為0.0f。

最后的想法

希望您喜歡這些問(wèn)題! 但是,如果您發(fā)現(xiàn)自己的代碼庫(kù)中的困惑者花費(fèi)了太多時(shí)間,那可能就不理想了。 對(duì)于這種情況,我們?yōu)镴ava構(gòu)建了Takipi 。 Takipi是一個(gè)Java代理,它收集解決生產(chǎn)錯(cuò)誤所需的所有數(shù)據(jù)-無(wú)需遍歷日志文件并嘗試重新創(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

總結(jié)

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

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