首页 > 基础资料 博客日记

Java使用局部变量防止空指针

2023-07-24 16:40:15基础资料围观204

本篇文章分享Java使用局部变量防止空指针,对你有帮助的话记得收藏一下,看Java资料网收获更多编程知识

在多线程修改对象a的时候,即使加了空判断也容易发生空指针。 因为在判断a不为空后,另一个线程刚好把a置空,这时去使用a时就触发空指针异常了。 ```java if (a != null) { a.foo(); } ``` 多线程并发模拟:一个线程间隔10ms不停地读字符串str的长度,另一个线程每5ms把str置空或者重新赋值。 ```java public class Test{ static String str = "str"; public static void main(String[] args) { new Thread(new Runnable(){ @Override public void run() { while(true) { if (str != null) { System.out.println(str.length()); } sleep(10); } } }).start(); new Thread(new Runnable(){ @Override public void run() { while(true) { if (str == null) { str = "newStr"; } else { str = null; } sleep(5); } } }).start(); } private static void sleep(long time) { try { Thread.sleep(time); } catch (Exception e) { // ignore } } } ``` 运行很快就会 ```java Exception in thread "Thread-0" java.lang.NullPointerException at app.Test$1.run(Test.java:16) at java.lang.Thread.run(Thread.java:748) ``` 如果不用try-catch,可以使用一个局部变量temp引用str,判断和使用temp不会空指针 ```java public class Test{ static String str = "str"; public static void main(String[] args) { new Thread(new Runnable(){ @Override public void run() { while(true) { // if (str != null) { // System.out.println(str.length()); // } String temp = str; if (temp != null) { System.out.println(temp.length()); } sleep(10); } } }).start(); new Thread(new Runnable(){ @Override public void run() { while(true) { if (str == null) { str = "newStr"; } else { str = null; } sleep(5); } } }).start(); } private static void sleep(long time) { try { Thread.sleep(time); } catch (Exception e) { // ignore } } } ```

文章来源:https://www.cnblogs.com/rome753/p/16491351.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云