【问题标题】:Null pointer access: The variable can only be null at this location空指针访问:变量在这个位置只能为空
【发布时间】:2013-11-17 19:30:46
【问题描述】:
for(int i=0;i<n;i++){
  for(int j=0;j<26;j++){
    if(str.charAt(i)== strChar.charAt(j) )
    * strSet1.append(str.charAt(i));
  }
    * strSet2.append(str.charAt(i));
}

例外:

Exception in thread "main" java.lang.NullPointerException
  at AterSeries.main(AterSeries.java:33)

为什么这段代码会出现空指针异常

警告:空指针访问:变量 strSet1 在此位置只能为空 空指针访问:变量strSet2在该位置只能为空

【问题讨论】:

  • 请提供完整的警告信息,并标出出现的行。
  • 这意味着您的 str 字符串的长度小于 n 或 26
  • 我认为您的内部循环条件不正确。你的字符串长度是多少?
  • @TusharGupta:在这种情况下,它会抛出 IndexOutOfBoundsException。例如,当您在空对象上调用方法时,会抛出 NPE
  • str 是输入的 n,strChar 是 26 个字母

标签: java nullpointerexception stringbuffer


【解决方案1】:

strSet1strSet2 在此之前是否已初始化?如果它们为空,你会得到一个NullPointerException

* 编辑 *

您不能对 null 的变量调用 .append()(或任何其他方法)。将它们初始化为:

StringBuffer strSet1 = new StringBuffer();
StringBuffer strSet2 = new StringBuffer();

【讨论】:

  • 最初是的,三个变量都初始化为null,我该怎么办? @tomppa
  • 查看更新后的答案,您不能在 null 对象上调用方法。
  • 后面的 str 包含输入并且 strChar 不为空 - 它包含 26 个 alhabates @tomppa
  • strSet1strSet2 怎么样?
  • 当然 str 小于 26 但 str String 等于 n @Tusar gupta
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
相关资源
最近更新 更多