【问题标题】:null argument java null pointer [duplicate]空参数java空指针[重复]
【发布时间】:2020-11-29 10:02:19
【问题描述】:

这是我的代码,我不知道为什么“一个 == null”和“两个 == null”总是 False,我不能向我的方法发送任何 Null 参数! 请帮帮我

public class RepeatInString {
    public int StringInString(String one, String two) {
        if (one.equals("") || two.equals("") || one == null || two == null){
            return 0;
        }
        else{
            char[] oneChar = one.toCharArray();
            char[] twoChar = two.toCharArray();
            int repeatCounter = 0;
            int matchChars = 0;
            for (int i=0 ; i < (one.length()-two.length()+1) ;i++ ){
                matchChars = 0;
                for (int j=0; j<two.length() ;j++) {
                    if (oneChar[i + j] == twoChar[j])
                        matchChars += 1;
                    else
                        break;
                }
                if (matchChars == two.length())
                    repeatCounter += 1;
            }
            return repeatCounter;
        }
    }

【问题讨论】:

  • 字符串有isEmpty() 顺便说一句
  • 在您已经调用one.equals("") 之后检查one==null 是没有意义的,因为尝试的方法调用会引发异常。如果您要检查事物是否为空,请先检查。
  • @frozen 我自己总是忘记那个!
  • @khelwood 零长度和null一样吗?
  • 能否请您包含调用您的方法的代码?

标签: java arguments null-pointer


【解决方案1】:

如果你传递 null 参数,你会得到 NullPointerException,因为你正在做 one.equals("")。什么都为空。将抛出 NullPointerException。你会更好:

 if (one == null || two == null || one.equals("") || two.equals("")){

如果第一个条件为真,其余条件将被忽略。

【讨论】:

  • 是的,谢谢
【解决方案2】:

“点”是“取消引用”运算符。意思是:拿点左边的东西,按照参考,在你在那里找到的对象上,做这个操作。

因此,如果你写x.foo() 并且x 为空,你会得到一个NullPointerException

表达式a || b || c 是从左到右解析的。首先计算a。如果是真的,评估结束,结果已经很清楚了。如果为 false,则解析 b,以此类推。

所以,假设one 为空。

首先,评估one.equals("")(注意,您应该使用one.isEmpty(),这样更习惯)。 one 为 null,因此,此评估导致抛出 NullPointerException,然后执行结束。

你大概想要if (one == null || two == null || one.equals("") || two.equals("")) {

除了,你也不想要那个

null 不是“空”的代名词。 null 最好理解为:未知或没有值。

所以,如果我问你:'这个未知值在另一个未知值中',唯一可能的答案是:“我不知道”。

如果您用truefalse 回答这个问题,那么您就是在撒谎,或者至少是在猜测。不要那样做。在这种情况下,如果提供了 null,则抛出 nullpointerexception 是完全明智的。

有时您从外部系统读取输入,并且明确选择将空输入视为空字符串或其他一些标记值是完全可以接受的。如果是这种情况,请在系统边界上明确地执行此操作。

【讨论】:

  • 非常感谢我的朋友成功了,现在我感觉很棒
猜你喜欢
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
相关资源
最近更新 更多