[英]How to check if array element is null to avoid NullPointerException in Java
[英]How to avoid NullpointerException without null check in java
在下面的代碼中,我想跳過空檢查。 請讓我知道替代解決方案。
public class NullCheck {
public static void main(String[] args) {
String str=args[0];
if (null != str) //without using this null check how to avoid null pointer exception
{
System.out.println("Null check");
}
else
{
System.out.println("Null value");
}
}
}
謝謝
例如,可以使用Yoda Expressions避免許多空檢查。
if ("Hello".equals(str))
作為文字, "Hello"
絕不會為null
,並且內置的equals
方法將檢查str
是否為空。 另一種str.equals("Hello")
將要求您首先檢查str
。
有些人發現它們令人困惑,因此不一定總是可以相應地安排語法。
我猜想要做些功課嗎? 最終,老師希望您使用“嘗試捕獲塊”嗎?
try{
//what you want to do when its not null
}
catch (NullPointerException exp){
//what happens if its null
}
它嘗試在Try塊中執行代碼,但是如果發生NullPointerException,則可以在Catch塊中進行處理。 也許,也許就是您想要的。
我跳過了您代碼中的空檢查。 不會檢查任何值是否為null。
public class NullCheck {
static String str;
public static void main(String[] args) {
}
}
更嚴重的是,您可以:
static String str
初始化為= "";
(一個空字符串),並且它肯定不會為null
(只需確保沒有人可以為其分配null)! 另一種替代解決方案是始終將變量初始化為某種形式。 對於字符串,這可能是一個空字符串: String string = "";
。 對於集合,這可能是初始化為空集合: Collection<T> collection = Collections.emptyList();
或Collection<T> list = new ArrayList<>()
如果要在以后添加到Collection<T> list = new ArrayList<>()
。
但是問題是,在某個時候,您將需要查看對象是否為空,因為並非每個對象都具有一些默認的安全初始化值:
Scanner scanner = null;
try
{
scanner = new Scanner(...);
...
}
...
finally
{
if(scanner != null) scanner.close();
}
因此,我認為您不能完全避免進行空檢查,但是可以減輕它的負擔。
我不知道您的檢查有什么問題,這似乎是很好的解決方案,但是您可以使用try-catch語句,或者通過默認值“”初始化str對象並檢查空字符串,或者使用斷言來檢查可為空的對象。
簡短的答案:您不能。 長答案:您可以使用解決方法,這實際上就是檢查if-else是否為null的方法。
有些已經提供了答案,我將給您一個提示(不是真正的答案,因為它實際上是相反的):Java 8引入了通用類: 可選
它在內部保存對對象的引用或null。 它為您提供的是,每當您嘗試對其所持有的對象調用一個方法時,要到達實際的對象,您都需要調用get()方法,這將更有可能提醒您檢查是否存在。
只是一個小樣本:
package whatever;
import java.util.Optional;
public class Main(){
public static void main(String[] args) {
Optional<String> a = Optional.empty();
Optional<String> b = Optional.ofNullable(notReallyAString);
Optional<String> c = Optional.of("John Paul II");
if(a.isPresent()) System.out.println("Empty optional, you shouldnt be able to see this");
if(b.isPresent()) System.out.println("Optional with a null, shouldnt be able to see this");
if(c.isPresent()) System.out.println(c.get());
}
}
但是請注意,它不應該是通用的任何值范圍,您更有可能只希望將Optional僅用作要對客戶端說的方法的返回類型,它可能確實為null 。
請記住,嘗試(通過get()方法)獲取Optional實例內的null元素將立即導致NoSuchElementException(但它仍然是未經檢查的異常)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.