🥲 🥸 🤌 🫀 🫁 🥷 🐻❄️🦤 🪶 🦭 🪲 🪳 🪰 🪱 🪴 🫐 🫒 🫑 🫓 🫔 🫕 🦤 🪶 🦭 🪲 🪳 🪰 🪱 🐻❄️ 🫐 🫒 🫑 🫓 🫔 🫕
♔博主昵称:�欢快↑㎡
🕍博客主页:�欢快↑㎡的博客_CSDN博客-学习注意点杂记,BUG集,安装教程领域博主
⚇很方便的在线编辑器:Lightly
🥗感谢点赞🤞🏻评论🤞🏻收藏
相信吧!🤜🏻我们很优秀,还可以更加优秀,加油!🌼让我们一起在写作中记录巩固学习吧!
1.三目运算符空指针问题?
三目运算符condition? 表达式1:表达式2中,表达式1和表达式2在类型对齐时,可能会出现自动拆箱导致NPE异常。
触发自动拆箱的两种场景:
1)表达式1 或者表达式2的值只有一个原始类型。
2)表达式1 或者表达式2的值的类型不一样,会强制拆箱升级成表示范围更大的那个类型。
例子:
Integer a = 1;
Integer b = 2;
Integer c = null;
Integer result = (flag ? a*b : c);
多个 Integer 相乘的结果是 int。
a*b 的结果是int 类型,c会强制拆箱成int类型,会抛出NPE异常。
回顾:
a?b:c?d:e 将按a?b:(c?d:e)执行。
自动装箱与自动拆箱
java中的8种基本数据类型,是存储在栈内存中,不会在堆上分配内存,使用起来更加高效。
但是基本数据类型不是对象,在实际使用中会有诸多不便,如集合类要求元素必须是Object类型,基本数据类型无法使用。
自动装箱 :就是将基本数据类型自动转换成对应的包装类。
自动拆箱:就是将包装类自动转换成对应的基本数据类型。
自动装箱都是通过包装类的valueOf()方法来实现的 。 自动拆箱都是通过包装类对象的xxxValue()来实现的(如 booleanValue()、longValue() 等)。
案列复现:
boolean flag = true; // 设置成 true,保证条件表达式的表达式二一定可以执行
// 如果表达式1为true则表达式2不会执行
boolean simpleBoolean = false; // 定义一个基本数据类型的 boolean 变量
Boolean nullBoolean = null;// 定义一个包装类对象类型的 Boolean 变量,值为 null
boolean x = flag ? nullBoolean : simpleBoolean; // 使用三目运算符并给 x 变量赋值
最后一行代码会进行自动拆箱,导致NPE
当第二位和第三位表达式都是包装类型的时候,该表达式的结果才是该包装类型,否则,只要有一个表达式的类型是基本数据类型,则表达式得到的结果都是基本数据类型。如果结果不符合预期,那么编译器就会进行自动拆箱。
避免方法:
涉及三目运算符,最好保持第二位和第三位表达式的类型一致,并且如果
要把三目运算符表达式给变量赋值的时候,也尽量保持变量的类型和他们保持一致。
并且,做好单元测试!!!
2.为什么建议初始化HashMap的容量大小?
HashMap中定义的成员变量:size、loadFactor、threshold、DEFAULT_LOAD_FACTOR 和 DEFAULT_INITIAL_CAPACITY等。
● transient int size;
○ 记录了 Map 中 KV 对的个数
● loadFactor
○ 装载因子,用来衡量 HashMap 满的程度。loadFactor 的默认值为 0.75f(static final float DEFAULT_LOAD_FACTOR = 0.75f;)。
● int threshold;
○ 临 界 值, 当 实 际 KV 个 数 超 过 threshold 时,HashMap 会 将 容 量 扩 容,
threshold =容量 * 加载因子
● 除了以上这些重要成员变量外,HashMap 中还有一个和他们紧密相关的概念:capacity
○ 容量,如果不指定,默认容量是 16(static final int DEFAULT_INI-TIAL_CAPACITY = 1 << 4;)
size 和 capacity
size是已经装了多少元素
capacity是当前最多可以装下多少个元素文章来源:https://www.toymoban.com/news/detail-445123.html
HashMap是有扩容机制的,默认容量是16,当达到扩容条件的时候,就会进行扩容文章来源地址https://www.toymoban.com/news/detail-445123.html
到了这里,关于java开发手册——13问的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!