Java的5个古怪问题

我们有机会尝试了一些最奇怪的Java难题

即使是最有经验的Java开发人员,也会在这篇文章中发现令人困惑的问题。 或至少是有趣的(绝对不公平)。 在经历了Java Deathmatch冒险之后,我们决定这次发布一系列不同的问题,着重介绍您可以使用Java进行的一些不寻常且古怪的事情。 对于我们之前的测验结果,您可以查看这篇文章 ,看看是否可以解决5个开发人员中有4个出错的问题。 weird.java_

在家(或办公室)尝试一下。 但是,请不要在现实的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 ASCII

4.不要放弃!

_,_和_为什么是不同的变量? 您可能已经猜对了。 答案是使用隐藏的字符作为合法的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js 取得数组下标_数组的介绍及使用

JavaScript 中的数组常用于在单个变量中存储多个值。数组就是一组数据的集合&#xff0c;在内存中表现为一段连续的内存地址(保存在堆内存)。创建数组的目的就是为了保存更多的数据。数组概念和语法概念&#xff1a;数组是一个特殊变量&#xff0c;一次可以容纳多个值。特点&am…

bigdecimal取小数部分_小数精度丢失问题分析和解决

无论在什么业务中&#xff0c;钱?是非常重要的东西&#xff0c;对账的时候一定要对的上&#xff0c;不能这边少一分钱那边多一分钱。对于数值的计算&#xff0c;尤其是小数&#xff0c;floate和double都是禁止使用的。阿里强制要求存放小数时使用 decimal&#xff0c;禁止使用…

使用LinkedList模拟一个堆栈或者队列数据结构

使用LinkedList模拟一个堆栈或者队列数据结构。 堆栈&#xff1a;先进后出 如同一个杯子。 队列&#xff1a;先进先出 如同一个水管。 import java.util.LinkedList;public class DuiLie {private LinkedList link;public DuiLie() {link new LinkedList();}public void m…

k40游戏增强版服务器维护中,Redmi K40 游戏增强版发布,第四台 K40 出现了

原标题&#xff1a;Redmi K40 游戏增强版发布&#xff0c;第四台 K40 出现了今晚 Redmi 发布了旗下的新款游戏手机 —— Redmi K40 游戏增强版&#xff0c;这也是K40、K40 Pro、K40 Pro 之后的又一款 K40 产品&#xff0c;主打的是专游戏功能和轻薄设计。Redmi K40 游戏增强版使…

mpvue微信小程序动画_入门微信小程序

为何现在的微信小程序还是高温不退&#xff1f;主要原因如下&#xff1a;无需安装、不占内存、易传播。废话不多说&#xff0c;开始进入开发&#xff01;-----------小程序环境搭建-----------------------------------账号注册百度搜索 "微信公众平台"官网地址&…

瀑布流式布局

今天终于搞懂了瀑布流式布局&#xff0c;哈哈&#xff0c;总结下 瀑布流式布局分为两种类型&#xff1a;1、每一列都限定宽度不限定高度的布局&#xff08;使用浮动&#xff09;2、宽度不是写死的&#xff0c;是根据页面的放大缩小变化的&#xff08;定位布局&#xff09; 瀑布…

物理服务器备份系统,物理备份和逻辑备份区别

物理备份和逻辑备份区别 内容精选换一换可能这份面试题还不足以包含所有Java问题&#xff0c;但有了它&#xff0c;我相信你一定不会“败”的很惨&#xff0c;有了它&#xff0c;足以应对目前市面上绝大部分的Java面试了&#xff0c;因为这些问题不论是从深度还是广度上来讲&am…

dd命令iso linux_BootISO:从 ISO 文件中创建一个可启动的 USB 设备

今天&#xff0c;我们将讨论名为 BootISO 的实用程序类似工具。它是一个简单的 bash 脚本&#xff0c;允许用户来从 ISO 文件中创建一个可启动的 USB 设备。-- Prakash Subramanian(作者)为了安装操作系统&#xff0c;我们中的大多数人(包括我)经常从 ISO 文件中创建一个可启动…

java基础-接口

转载于:https://www.cnblogs.com/ceshi2016/p/6025027.html

gwt入门和进阶_GWT入门

gwt入门和进阶GWT是Google Web Development Kit的缩写&#xff0c;可让程序员使用Java开发Ajax Web应用程序。 GWT编译器将Java代码转换为JavaScript和html代码。 GWT应用程序称为模块&#xff0c;并且使用xml文件描述模块&#xff0c;假设该模块名称为xml文件的“ mymodule”名…

workbook加载文件路径_通过Workbook.XML 修复Excel自定义名称

小伙伴们经常想求助IT 提升打开Excel的速度&#xff0c; 标准回答是&#xff1a;重启。其实Excel 中影响打开速度的几个因素&#xff1a;1. 公式 2. 链接 3. 自定义名称 自定义名称常常被人忽视&#xff0c;里面经常隐藏着众多错误&#xff0c;而且有很多的名称是隐藏的&#x…

将IDE检查应用于自定义Java批注

J2SE 5中注释的引入改变了我们编写和处理Java的方式。 除了Java SE的预定义注释外 &#xff0c;框架&#xff0c;IDE和工具包还引入了自己的自定义注释 。 Checker框架提供了一些示例&#xff0c;说明如何使用自定义注释在Java中增加类型安全性 。 在本文中&#xff0c;我着眼于…

有什么用_app用什么软件编写

自己咋开发APP这得看你的学习程度了&#xff0c;如果你学了安卓开发那么久按照教程来吧&#xff0c;如果没有学过&#xff0c;那么就看看我的回答是不是贴题意的。比较快的开发app方式。接入任意后台&#xff0c;通过HBuilder封装成app。2.使用MUI&#xff0c;借用官方的组件代…

Git 初始化版本库

创建带工作区的版本库 在开始一个新项目时&#xff0c;首先就要创建并初始化代码库。如果是在本机的工作目录中&#xff0c;那么&#xff1a; $ git init 也就够用了。如果想要初始化的版本库不在当前目录&#xff0c;需要为 git init 命令指定版本库所在的目录&#xff1a; $ …

如果今天完成,ESB会是什么样子?

JavaOne 2015即将结束&#xff0c;这又是一次很棒的社区活动。 我和Rafael进行了两次会议和HOL 。 我最喜欢的会议之一实际上是&#xff1a;关于ESB&#xff08;如果今天完成的话&#xff09;的样子。 我以为那是过去&#xff1f; 我通常也倾向于这样说。 但是&#xff0c;系统…

线程间的通信 设置线程等待与线程唤醒

代码实现上述框图&#xff1a; 1 //等待唤醒机制2 3 /*4 wait(),notify(),notifyAll()必须用在同步中&#xff0c;因为同步中才有锁。5 指明让持有那个锁的线程去等待或被唤醒&#xff0c;例如object.wait(),表明让持有object这把锁的线程等待。6 7 wait():让线程进入等待状态&…

centos6.8升级python3.5.2

1.查看系统python版本 [rootmyserver01 Python-3.5.2]# python -V Python 2.6.6 2.升级3.5.2 A.下载&#xff1a;wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz 或者在浏览器下载&#xff08;选择Linux/UNIX平台&#xff0c;选择3.5.2版本&#xff09; B.编译…

gwt的mvp模式_GWT MVP变得简单

gwt的mvp模式GWT Model-View-Presenter是用于大规模应用程序开发的设计模式。 它源于MVC&#xff0c;它在视图和逻辑之间进行划分&#xff0c;并有助于创建结构良好&#xff0c;易于测试的代码。 为了帮助像我这样的懒惰开发人员&#xff0c;我研究了如何减少使用声明式UI时要编…

简记用ArcGIS处理某项目需求中数据的步骤

文章版权由作者李晓晖和博客园共有&#xff0c;若转载请于明显处标明出处&#xff1a;http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目需求涉及如下几个步骤&#xff1a; a.矢量化 b.获取范围内要素 c.合并要素 d.简化要素 e.获取范围外要素。 2. 矢量化 新建图层 开启编辑&am…

企业应用程序集成简介

本文是我们名为“ Spring Integration for EAI ”的学院课程的一部分。 在本课程中&#xff0c;向您介绍了企业应用程序集成模式以及Spring Integration如何解决它们。 接下来&#xff0c;您将深入研究Spring Integration的基础知识&#xff0c;例如通道&#xff0c;转换器和适…