关于java空指针报错(NullPointException)

关于java的空指针报错:

最常见的空指针报错是因为在一个类的对象指针创建之后再调用它,没有给他分配空间,直接调用这个对象的方法或者数据,当然这个说起来还是很简单的,大部分的人都不会犯这样的错误,但是在某些情况也是很容易疏漏的,就会报空指针的错误。

1.

如这里,我们在创建一个bnode节点的时候,这里有一个自定义的类Data,如果不在创建这个类的时候给data指针分配一个空间,那么以后如果调用这个指针就会报空指针的错误。 所以,千万注意对于自定义类,一定要给他们分配空间。

2.在数组里面也很容易出现空指针的异常:

在数组里面要是创建一个自定义类型的数组,在遍历这个数组的时候,一定要记得加上if(s[i]==null)then会怎么样,如果不为空会怎么样。

这里对于创建数组的时候的内存分配问题需要有一个了解:

所以,可以看出来,在创建数组的时候系统就会给数组分配一个队里面的空间,但是访问的指针是放在栈里面的(即数组名Array)

Department[] dept = new Department[100];这样就能实现对于内存的分配,但是注意了如果只是声明了指针,就像Department[] dept,这个就只能分配一个栈里面的区域给他,这里的默认初始指向都是null。

3.基本数据类型的空指针报错

对于基本数据类型的空指针报错首先就要知道什么是基本数据类型:

基本数据类型本身就是存在栈里面的

注意:基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的!!

特别的:对于Sring类型,我们在使用String you="abc";和String you=new String("abc");

这两者的储存位置不同,所以我们在这里第一个abc是储存在常量池里面,而对于第二个abc就是储存在堆里面。所以如果用连等于符号是不能完成的。对于这种指针变量两边等于号传入的就是一个地址,而不是值。

String  虽说是引用数据类型,但形式参数的改变不影响实际参数的改变,这点上和基本数据类型是相同的,所以如果在类外或者别的地方改变String类型的值在传入原来的类,都不可以(也就是说传不过来)

另外:

如果实在是出现这个错误了,可以使用if(...!=null)来判断到底是哪个地方是空的!

在使用Collectors.toMap方法时,如果集合中存在null值,可能会导致空指针异常。这是因为toMap方法默认不允许出现重复的键,当键重复时,会抛出空指针异常。为了解决这个问题,可以在toMap方法中使用第三个参数来指定当键重复时的处理方式。 例如,可以使用mergeFunction来处理重复键的情况,这样在遇到重复键时,会执行mergeFunction来合并对应的值。具体代码如下所示: ``` Map<String, String> map = list.stream() .collect(Collectors.toMap(Node::getId, Node::getName, (n1, n2) -> n1, HashMap::new)); ``` 在这个例子中,我们指定了一个新的HashMap作为toMap方法的第四个参数,当键重复时,会将两个值合并为一个值。 另外,如果集合中存在null值,可以在toMap方法中使用Optional类来处理,确保值不为空。具体代码如下所示: ``` #### 引用[.reference_title] - *1* *3* [java stream collect toMap nullPointException异常](https://blog.csdn.net/weixin_40493969/article/details/108690223)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Collectors.toMap方法使用时候value报空指针问题解决](https://blog.csdn.net/hu10131013/article/details/126247475)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值