当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检查非常失败时相关推荐
- null导入失败_当null检查非常失败时
null导入失败 免责声明 在继续之前,我必须指出,当我们对Java进行编程时,本文中描述的技术没有实际目的. 就像填字游戏或拼图. 它主要训练您的大脑进行逻辑思维,可能发展您的Java语言知识甚至您 ...
- android动态设置错误页面,Android中替换WebView加载网页失败时的页面
我们用webView去请求一个网页链接的时候,如果请求网页失败或无网络的情况下,它会返回给我们这样一个页面,如下图所示: 上面这个页面就是系统自带的页面,你觉得是不是很丑?反正小编本人觉得非常丑,很难 ...
- access设置0字段为null是因为类型转换失败_Apache Pulsar 2.6.1 版本正式发布:2.6.0 加强版,新增 OAuth2 支持
在 Apache Pulsar 2.6.0 版本发布后的 2 个月,2020 年 8 月 21 日,Apache Pulsar 2.6.1 版本正式发布! Apache Pulsar 2.6.1 修复 ...
- 如何正确的使用Java8中的Optional类来消除代码中的null检查
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:一书生VOID lw900925.github.io/jav ...
- 登录失败时记住访问的地址
登录失败时记住访问的地址 使用spring MVC 访问时,在拦截器中记录访问的地址: Java代码 String path = request.getRequestURI();//"/ ...
- 当原图片加载失败时,如何让图片加载上我们默认给的图片
我们可能会遇到这样的问题,当页面中的图片的加载失败时,我们想要该图片加载我们给的默认的图片,我在这里分享一下几种做法,希望对大家有所帮助. 1.在img标签中加上 οnerrοr="this ...
- img图片加载失败时,展示默认图片的方法
1. 图片加载失败时会触发onerror事件,可以通过onerror事件使默认图片代替加载失败的图片 <img src="要展示的图片的地址" onerror="t ...
- img图片加载失败时的处理
当想对图片加载失败时进行特殊处理,可以使用onerror事件,里面为需要执行的代码. 如果由于其他原因导致onerror事件里加载图片时又报错,此时有可能会导致栈溢出而弹框报错,我们只需在inerro ...
- 用户sa登陆失败时,应该如何解决
用户sa登录失败时,应该如何解决 文章作者:R热血江湖私服网 文章来源:网络转载 用户 sa 登录失败.原因: 未与信任 SQL Server 连接 的解决方法2007-04-19 0 ...
最新文章
- 2014年新鲜出炉的16款免费英文字体
- VOA AGRICULTURE REPORT - Two Efforts Seek to Increase Food Security in Africa
- MySQL查询语句中的IN 和Exists 对比分析
- 为什么PCB板通常是绿色的?
- 【剑指offer - C++/Java】3、从尾到头打印链表
- 窃取发送到服务器的任何信息,担心信息泄密?MIUI 11测试“空信息授权”,保护你的隐私...
- 组织结构及权限模型设计
- 微型计算机地基本结构,微型计算机地基本结构.ppt
- amesim2020安装
- python课程设计实验报告-Python语言课程设计报告格式.doc
- Nordic fds 文件系统源码探究
- 操作实例:创建自定义 Windows PE 映像
- 合工大OJ 1359
- Raspberry 4B
- 从初级到资深:程序员的职业生涯思考与可迁移技能培养
- Mac动画交互设计软件Principle
- 骞云科技SmartCMP v3.5版本正式发布
- 个人常用的sql脚本语句
- IDS与IPS工作原理
- SQL SERVER 20005 分布式事务配置
热门文章
- React前端格式化时间
- vpn mysql_MYSQL数据库
- myeclipse窗口布局控件任意_木辛老师的编程课堂:Python和Qt第2讲之布局管理初探(三)...
- java 平台级模块系统_Java平台模块系统公众审查未能通过
- 海贼王为什么画风突变_什么是突变测试?
- Servlet和JSP之间的区别
- javafx swing_JavaFX技巧9:请勿混用Swing / JavaFX
- Java性能:For-eaching与Streaming
- java字节码_掌握Java字节码
- maven插件依赖_当Maven依赖插件位于