给long类型赋值null 报空指针异常

long类型的变量赋值为null是会报编译错误,因为long是基本数据类型,不支持赋值为null。如果要在Java中表示可能为空的数值类型(例如Long),则需要使用对应的包装类。

假设你定义了一个Long类型的变量,并将其赋值为null,那么在对这个变量进行操作时,就有可能出现空指针异常。例如:

Long value = null;
long result = value + 1L; // 将抛出空指针异常

上述代码中,由于value变量被赋值为null,所以在计算result的过程中,会出现空指针异常。这是因为对于Long类型的变量,在自动拆箱(将包装类转换为基本类型)时,如果值为null,就会抛出空指针异常。

为了避免空指针异常,可以在使用可能为空的数值类型时,先判断其是否为null,再进行操作。例如:

Long value = null;
long result = (value != null) ? value + 1L : 0L;

上述代码中,通过判断value是否为null来避免了空指针异常的发生。如果value不为空,则将其与1L相加;否则,将result赋值为0L

总之,基本数据类型不支持赋值为null,如果要表示可能为空的数值类型,需要使用对应的包装类。在使用可能为空的数值类型时,需要先判断其是否为null,再进行操作,以避免空指针异常。

其他包装类型亦如此,不光是点之前对象为空报NP, 这种情况也会的哈

一起学习,一起进步,公众号关注 "果酱桑"

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
出现空指针异常的原因可能是UDAF的实现中没有对空值进行处理。可以在UDAF中增加对空值的处理逻辑,例如: ``` public class MyUDAF extends UserDefinedAggregateFunction { // 定义聚合数据的数据类型和结果类型 private StructType inputSchema = DataTypes.createStructType(Arrays.asList( DataTypes.createStructField("inputCol", DataTypes.DoubleType, true) )); private StructType bufferSchema = DataTypes.createStructType(Arrays.asList( DataTypes.createStructField("sum", DataTypes.DoubleType, true), DataTypes.createStructField("count", DataTypes.LongType, true) )); private DataType dataType = DataTypes.DoubleType; private boolean deterministic = true; @Override public StructType inputSchema() { return inputSchema; } @Override public StructType bufferSchema() { return bufferSchema; } @Override public DataType dataType() { return dataType; } @Override public boolean deterministic() { return deterministic; } @Override public void initialize(MutableAggregationBuffer buffer) { buffer.update(0, 0.0); buffer.update(1, 0L); } @Override public void update(MutableAggregationBuffer buffer, Row input) { if (!input.isNullAt(0)) { double sum = buffer.getDouble(0) + input.getDouble(0); long count = buffer.getLong(1) + 1; buffer.update(0, sum); buffer.update(1, count); } } @Override public void merge(MutableAggregationBuffer buffer1, Row buffer2) { double sum = buffer1.getDouble(0) + buffer2.getDouble(0); long count = buffer1.getLong(1) + buffer2.getLong(1); buffer1.update(0, sum); buffer1.update(1, count); } @Override public Object evaluate(Row buffer) { if (buffer.isNullAt(1) || buffer.getLong(1) == 0) { return null; } else { return buffer.getDouble(0) / buffer.getLong(1); } } } ``` 在`evaluate`方法中,增加了对空值的判断,如果计数器为0或者空值,则返回`null`。这样可以避免出现空指针异常

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值