【问题标题】:int return type in javajava中的int返回类型
【发布时间】:2013-01-05 16:44:17
【问题描述】:

下面是代码 sn-p ,我很困惑。方法的返回类型是 int ,所以该方法不能返回 null。但是,当我取消注释第一个返回语句和注释第二个返回语句时,方法的不显示任何错误,甚至没有警告。 我很困惑这背后的原因是什么。我使用的是 java 版本 7。

 protected int calculateLogicalPageRangeForTitles(String logicalpage) throws Exception {
     //return StringUtils.isNumeric(logicalpage) ? Integer.parseInt(logicalpage) : null;
     return null;
 }

【问题讨论】:

  • 这里没有编译,原因有两个:没有为logicalpage指定类型,返回类型不兼容。
  • 您的方法无法编译(logicalpage 没有类型,后来您使用logicalPage - 大写 P)。但是当你取消注释第一行时,返回要么是Integer.parseInt(logicalPage) 要么是0 两者都是或者返回有效的ints...
  • 对不起我的错误代码 sn-p。我已经编辑了。我同意

标签: java int return


【解决方案1】:

代码合法且可以编译。

参见 Java 规范: http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.25

如果第二个和第三个操作数之一是 null 类型并且 另一个的类型是引用类型,那么 条件表达式就是那个引用类型。

这意味着,?: 的结果将是一个整数,它将被拆箱为 int。此拆箱将引发 NullPointerException。

【讨论】:

    【解决方案2】:

    此语句仅返回intparseInt 返回一个 int0 是一个 int

    return StringUtils.isNumeric(logicalPage) ? Integer.parseInt(logicalPage) : 0;
    

    【讨论】:

      【解决方案3】:

      第一个return声明

      return StringUtils.isNumeric(logicalPage) ? Integer.parseInt(logicalPage) : 0;
      

      总是返回 int 值(或异常)。方法Integer.parseInt() 也返回一个原始的int 值。因此不会显示任何错误或警告。

      然而,第二个语句,

      return null;
      

      尝试为 primitive 返回类型 int 返回一个 null 值,该值无效并因此导致编译器错误。

      【讨论】:

        【解决方案4】:

        这是因为 parseInt 返回一个 int(原始类型),它与您的方法的签名相匹配。

        另一方面,null 与原始 int 不兼容,这就是您遇到错误的原因。

        【讨论】:

          【解决方案5】:

          因为您的第一条语句将始终返回 int。所以它编译了。

          但第二个语句返回null,它是Object 类型。如果您的返回类型是Integer 而不是int,这将编译

          【讨论】:

            【解决方案6】:

            int 是一个原始的......因此它必须有一个值。 null 是一个值,告诉我们(对类的)引用不引用任何实例。

            【讨论】:

              【解决方案7】:

              您的第一行也无效。如果结果为 false 并尝试返回 null 值,则会引发异常。

              如果你把代码写成一个冗长的 if 语句,它会给你错误。喜欢:

              if (StringUtils.isNumeric(logicalpage){
                  return Integer.parseInt(logicalpage);
              }else{
                  return null;
              }
              

              【讨论】:

                猜你喜欢
                • 2014-03-19
                • 2020-12-05
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多