java string不为空_java如何正确判断String为空
Hi多磨,大家好我是suleifi,今天给大家说说java中是如何处理String的。
在一个大佬非常多的QQ群中,我发现一位大佬截图了他自己的代码,他是用如下方式判断String是否为空的:
//str变量为String类型;
if( str.equals("") || str == null || str.equals("null") ){
//...省略
}
Q:那么如果( str = null )上面这段代码会发生什么呢?
A:运行后瞬间就抛出一段NullPointerException!!!
Q:为什么会这样呢?
A:实例java代码演示编译成.class是什么样子的
String str = null;
System.out.println(str);
打印出了null???
那么如果打印出了null你是否会想到使用( str.equals("null") )是不是就不会报错了!
其实和上面的( str.equals("") )一样会抛出NullPointerException
那么问题就来了他为什么会一直抛出NullPointerException呢?
其实在这里我们不难发现他的equals方法并没有static修饰
public boolean java.lang.String.equals(java.lang.Object anObject){}
那么没有使用static学过java反射的同学都知道java会传递当前对象!
String str = null;
Class>c = String.class;
Method m = c.getMethod("equals");
m.invoke(str);//此时这个方法会返回一个boolean类型的数据
那么问题就来了,如果使用setAccessible是不是就不会报错了?
答案:不可能!
为什么呢? 学过c/c++的同学都知道字符串的原型就是char[]字符数组,java的String内部储存了charArray,调用了equals方法后会检测当前String对象储存的字符那么问题就来了用==不简单过吗?
当你使用对等的时候他的返回值会是false
String str_1 = "abc";
String str_2 = "abc";
System.out.println(str_1==str_2);//true
System.out.println(str_1.equals(str_2));//true
String str_3 = new String("abc");
String str_4 = new String("abc");
System.out.println(str_3==str_4);//false
System.out.println(str_3.equals(str_4));//true
/*你会发现用new String的对象会发生变化,
*那是因为String str = 的是new String()对象
*而不是String str = "abc"的"abc"对象
*java中==(对等)只会判断内存不会判断值。
*/
知道java是如何判断数据和储存数据后我们就break到前面的话题吧!
//java可以使用如下方式进行判断
String str = null;
if( str == null || str.equals("") ){
//...省略
}
//这样就行了
如果你们还有疑问什么情况下String会是null类型但又拥有"null"字符呢?
使用StringBuilder与StringBuffer的append方法即可实现将null转为"null";
String str = null;
StringBuilder strBuilder = new StringBuilder();//记住这里如果是null的对象不能直接放入String str = null;不然会抛出NullPointerException异常!
//要使用append方法
strBuilder.append(str);
System.out.println(strBuilder.toString());//就会是null
//但PrintStream类下的println本来就是这种结构所以打印null的时候并不会抛出NullPointerException。
我的sulefi,感谢观看,给个赞吧!!!
我们下篇文章见!!!!
java string不为空_java如何正确判断String为空相关推荐
- java如何判断对象为空_java对象如何判断是否为空
在实际书写代码的时候,经常会因为对象为空,而抛出空指针异常java.lang.NullPointerException. 下面我们来看一下java中判断对象是否为空的方法:(推荐:java视频教程) ...
- java怎么判断对象为空_java中怎么判断对象是否为空
java中判断对象是否为空的方法: 首先来看一下工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的:另一种是org.springframework.u ...
- java 传值为不可变_Java函数传参(String的不可变性)
本篇博客无意讨论Java里面函数传参是否只有值传递还是值传递和引用传递同时存在,仅讨论函数传参的一些原理. 一. 什么是函数传参? 最常见的一个swap函数:下面这个swap函数并不能实现我们想要的交 ...
- java给xyz大小排序_java实现递归实现string xyz排序
先用上面的一张图说明逻辑,这就是递归的逻辑. xy排序就相当于在x的空位插上y,x只有两个空位,y插前面得带yx,y插后面得到xy xyz排序就相当于在xy排序的所有结果插上z,结果如图 代码实现如下 ...
- python如何判断为空_python中怎么判断是否为空
其中None的特殊之处在于,它既不是数值0,也不是某个数据结构的空值,它本身就是一个空值对象.它的类型是NoneType,它遵循单例模式,也就是说,在同一命名空间下的所有None其实质上都是同一个空值 ...
- php判断关联数组为空,php 关联数组判断是否为空
php教程 $array = array(0); if(empty($array)){ echo "我空了 "; }else{ echo "我不空啊 "; } ...
- java exec dir的例子_java.lang.Runtime.exec(String[] cmdarray, String[] envp, File dir)方法实例...
全屏 java.lang.Runtime.exec(String[] cmdarray, String[] envp, File dir)方法执行在指定环境和工作目录的独立进程中指定的命令和参数.字符 ...
- java map 为空_java中如何判断map是否为空
java中判断map是否为空的方法是:可以利用isEmpty()函数来判断.isEmpty()函数是java中用于判断某种容器是否有元素的系统库函数,例如用来判断ArrayList.HashSet.H ...
- java map怎么判断为空_java中如何判断map是否为空
java中判断map是否为空的方法是:利用isEmpty()函数来判断. (推荐学习:java入门程序) 函数介绍: IsEmpty()是Java中用于判断某种容器是否有元素的系统库函数.如用来判断A ...
最新文章
- 自己动手安装ARM交叉编译工具链
- TCP三次握手和四次挥手图示
- css:text-align:justify的用法
- cocos2dx 引入 libpomelo库
- silverlight 学习笔记 (五): MVVM Light Toolkits 之 RealCommand
- Runtime的应用
- 彩色BMP转换成灰度图的原理
- Elasticsearch Curator使用
- 纯数学教程 Page 325 例LXVIII (12)
- Log4j2发新版本2.16.0,加固漏洞防御,不想被攻击,就赶快更新啦!
- 软硬负载之间的对比及优缺点
- 计算机c程序题孔融让梨,幼儿园大班语言游戏教案《孔融让梨》含PPT课件
- [转载]VC6中的文件后缀
- pandas快速把txt转为excel
- 【联想拯救者R7000】安装nvidia驱动Perform MOK management 界面键盘失灵现象(已解决)
- 分析微信聊天记录(1)——获取微信聊天记录
- 杀毒软件可以查杀已知的计算机病毒,杀毒软件可以查杀( )。
- python忽略错误继续执行_python能在错误出现之后再进行处理吗?
- 1024程序员节节日快乐
- 记一次zip压缩包打开异常问题
热门文章
- c语言循环结构菱形九九乘法表,C语言基础用基本的循环语句打印实心和空心菱形、九九乘法表 ....
- php 生命变量,深入理解PHP原理之变量生命期(一)
- java客户端服务器聊天程序流程图_基于java的socket简单聊天编程
- android多个文件夹压缩,android文件或文件夹压缩
- oracle通过DBlink连接mysql
- Spring Boot 2 快速教程:WebFlux 集成 Thymeleaf(五)
- ReactNative之Flex布局总结
- asynchttpclient学习
- android网络框架
- lua 区间比较_TI-Lua 系列教程2.4.1: 条件分支