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为空相关推荐

  1. java如何判断对象为空_java对象如何判断是否为空

    在实际书写代码的时候,经常会因为对象为空,而抛出空指针异常java.lang.NullPointerException. 下面我们来看一下java中判断对象是否为空的方法:(推荐:java视频教程) ...

  2. java怎么判断对象为空_java中怎么判断对象是否为空

    java中判断对象是否为空的方法: 首先来看一下工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的:另一种是org.springframework.u ...

  3. java 传值为不可变_Java函数传参(String的不可变性)

    本篇博客无意讨论Java里面函数传参是否只有值传递还是值传递和引用传递同时存在,仅讨论函数传参的一些原理. 一. 什么是函数传参? 最常见的一个swap函数:下面这个swap函数并不能实现我们想要的交 ...

  4. java给xyz大小排序_java实现递归实现string xyz排序

    先用上面的一张图说明逻辑,这就是递归的逻辑. xy排序就相当于在x的空位插上y,x只有两个空位,y插前面得带yx,y插后面得到xy xyz排序就相当于在xy排序的所有结果插上z,结果如图 代码实现如下 ...

  5. python如何判断为空_python中怎么判断是否为空

    其中None的特殊之处在于,它既不是数值0,也不是某个数据结构的空值,它本身就是一个空值对象.它的类型是NoneType,它遵循单例模式,也就是说,在同一命名空间下的所有None其实质上都是同一个空值 ...

  6. php判断关联数组为空,php 关联数组判断是否为空

    php教程 $array = array(0); if(empty($array)){ echo "我空了 "; }else{ echo "我不空啊 "; } ...

  7. java exec dir的例子_java.lang.Runtime.exec(String[] cmdarray, String[] envp, File dir)方法实例...

    全屏 java.lang.Runtime.exec(String[] cmdarray, String[] envp, File dir)方法执行在指定环境和工作目录的独立进程中指定的命令和参数.字符 ...

  8. java map 为空_java中如何判断map是否为空

    java中判断map是否为空的方法是:可以利用isEmpty()函数来判断.isEmpty()函数是java中用于判断某种容器是否有元素的系统库函数,例如用来判断ArrayList.HashSet.H ...

  9. java map怎么判断为空_java中如何判断map是否为空

    java中判断map是否为空的方法是:利用isEmpty()函数来判断. (推荐学习:java入门程序) 函数介绍: IsEmpty()是Java中用于判断某种容器是否有元素的系统库函数.如用来判断A ...

最新文章

  1. 自己动手安装ARM交叉编译工具链
  2. TCP三次握手和四次挥手图示
  3. css:text-align:justify的用法
  4. cocos2dx 引入 libpomelo库
  5. silverlight 学习笔记 (五): MVVM Light Toolkits 之 RealCommand
  6. Runtime的应用
  7. 彩色BMP转换成灰度图的原理
  8. Elasticsearch Curator使用
  9. 纯数学教程 Page 325 例LXVIII (12)
  10. Log4j2发新版本2.16.0,加固漏洞防御,不想被攻击,就赶快更新啦!
  11. 软硬负载之间的对比及优缺点
  12. 计算机c程序题孔融让梨,幼儿园大班语言游戏教案《孔融让梨》含PPT课件
  13. [转载]VC6中的文件后缀
  14. pandas快速把txt转为excel
  15. 【联想拯救者R7000】安装nvidia驱动Perform MOK management 界面键盘失灵现象(已解决)
  16. 分析微信聊天记录(1)——获取微信聊天记录
  17. 杀毒软件可以查杀已知的计算机病毒,杀毒软件可以查杀( )。
  18. python忽略错误继续执行_python能在错误出现之后再进行处理吗?
  19. 1024程序员节节日快乐
  20. 记一次zip压缩包打开异常问题

热门文章

  1. c语言循环结构菱形九九乘法表,C语言基础用基本的循环语句打印实心和空心菱形、九九乘法表 ....
  2. php 生命变量,深入理解PHP原理之变量生命期(一)
  3. java客户端服务器聊天程序流程图_基于java的socket简单聊天编程
  4. android多个文件夹压缩,android文件或文件夹压缩
  5. oracle通过DBlink连接mysql
  6. Spring Boot 2 快速教程:WebFlux 集成 Thymeleaf(五)
  7. ReactNative之Flex布局总结
  8. asynchttpclient学习
  9. android网络框架
  10. lua 区间比较_TI-Lua 系列教程2.4.1: 条件分支