【问题标题】:Assigning long to Long in Java在 Java 中将 long 分配给 Long
【发布时间】:2011-10-26 18:04:53
【问题描述】:

我目前正在查看Android Tutorials 之一。我找到了这样的表达式:

Bundle bundle = getIntent().getExtras();
Long longVariable = bundle.getLong(someId);
if( longVariable != null )
{
  //doSomething
}

在 API 中查看 Bundle.getLong 后,我看到它返回一个 long(原始)。 现在,我有一段时间没有写 Java,同时只写过 C#,但是对象 Long longVariable 变量怎么可能是 null 呢?

【问题讨论】:

  • long != Long,大写的是小写原语的包装类。见download.oracle.com/javase/1.4.2/docs/api/java/lang/Long.html
  • 我想他知道这一点。他问的是long i = some value; Long j = i;,然后立即检查j == null
  • @alextsc:我知道。否则我不会问:)。
  • 只是想澄清一下。听起来你不知道我,因为当你知道这是一个类(这里使用的)时,至少应该清楚它怎么可能是null。
  • @alextsc 我仍然不清楚在这个例子中 longVariable 如何可以为空。

标签: java android object type-conversion primitive


【解决方案1】:

如果getLong() 真的有返回类型long 它不可能是,即l 永远不会为空。可能程序员没有查返回类型,而是从方法名推断出Long会返回。

【讨论】:

  • 我不希望从很多用户必须阅读的官方 android 教程中得到一些东西。尽管如此,这也是我猜到的,但我想也许还有更多。
【解决方案2】:

如果你传入了错误的 id 怎么办?然后没有找到,但是你得到null,还是引发了异常? 文档指出:

public long getLong (String key)
Returns the value associated with the given key, 
or 0L if no mapping of the desired type exists for the given key.  
Parameters

     key    a String
Returns
     a long value

所以它永远不会返回 null,但最终会返回 0L。但是 getLongArray 有时会返回 null,所以可能是使用 getLongArray 的剩余部分?

【讨论】:

  • 如果返回类型是“long”,它怎么可能是空的?这正是我的问题。
  • 它永远不能为空,最坏的情况是0L。我编辑了答案以添加文档:D
  • 也许程序员的意图是检查if (l != 0)。
  • 完全正确。因此,对 null 的检查将始终返回 true。意味着该示例存在某种缺陷。起初我认为装箱时可能会有一些 0L 到 null 的隐式映射。但我认为这将是非常奇怪的行为。因此这个问题。
【解决方案3】:

在 Java 中,Long 是一个对象,并且与任何对象一样,它可以为空。 long 是原始类型,不能为空。

从 Java 1.5 开始,Java 支持自动装箱和拆箱,这意味着它可以自动在原语和对象之间进行转换。

如果一个方法返回long,那么即使您将其转换为Long,也不检查null 可能是安全的,但是如果一个方法返回Long 对象,那么检查空值是一个好主意。

【讨论】:

    【解决方案4】:

    尝试创建新实例。 bundle.getLong(someId) 返回原始 long 类型而不是 Long。 Long l = new Long(bundle.getLong(someId));

    然后检查if(l != null)

    确保您从Bundle 中提取了正确的long。试试Logging 这个Long 对象看看是不是没事。

    Log.i("MY LONG: ", String.valueOf(l));

    【讨论】:

      猜你喜欢
      • 2017-07-30
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      相关资源
      最近更新 更多