Java基础学习笔记、equals与包装类的核心考点哈喽今天又啃了一波Java基础知识点主要聚焦在和equals的区别、hashCode的关联还有包装类的那些易踩坑点整理成笔记方便以后回顾一、 与 equals别再傻傻分不清首先要明确和equals不是一回事核心区别先拎清楚的比较规则基本数据类型比较的是值是否相等比如int a10, b10; ab → true引用数据类型比较的是内存地址是否相等毕竟引用类型变量存的是对象的内存地址。equals方法的本质equals是Object类的原生方法所有类都默认继承原生equals底层其实就是本质还是比较地址但很多常用类会重写equals比如String类先判断地址地址不同再逐字符比较内容所以String的equals是比较内容是否相等自定义类比如示例里的Cat类如果只重写equals不重写hashCode会导致HashSet去重失效因为HashSet是靠hashCode判断对象是否重复hashCode默认是对象地址的哈希值即便equals返回true只要hashCode不同HashSet仍认为是两个对象。✨ 划重点重写equals时必须重写hashCode保证“相等的对象必须有相等的hashCode”这是Java的约定。二、包装类基本数据类型的“对象化”改造Java里“万物皆对象”但8种基本数据类型int、long、float、double、boolean、char、byte、short并不是对象包装类就是为了弥补这个短板而生基本数据类型 ↔ 包装类对应关系| 基本数据类型 | 包装类 ||--------------|--------------|| int | Integer || long | Long || float | Float || double | Double || boolean | Boolean || char | Character || byte | Byte || short | Short |自动拆装箱编译期语法糖自动装箱基本类型 → 包装类编译时会被替换成valueOf()方法比如Integer c 10;→ 编译后实际是Integer c Integer.valueOf(10);自动拆箱包装类 → 基本类型编译时会被替换成xxxValue()方法比如int a c;→ 编译后实际是int a c.intValue();经典坑Integer的“128陷阱”测试代码里发现一个有趣的现象Integerd128;Integere128;System.out.println(de);// falseIntegerf127;Integerg127;System.out.println(fg);// true原因藏在Integer.valueOf()的源码里JDK为了优化性能给-128~127的Integer值做了缓存一个叫cache的数组。当自动装箱的值在这个区间时直接返回缓存里的对象地址超出区间则新建Integer对象所以地址不同比较就为false。✨ 提醒比较Integer值建议用equals而非三、补全基本数据类型与字符串的互转方法日常开发中经常要把字符串转成基本类型或把基本类型转成字符串整理了全量转换方法再也不用翻源码啦1. 字符串 → 各基本数据类型核心各包装类的parseXxx()/valueOf()目标类型转换方法示例备注intString s 123; int num Integer.parseInt(s);或Integer numObj Integer.valueOf(s);超出int范围会抛NumberFormatExceptionlongString s 123456; long num Long.parseLong(s);或Long numObj Long.valueOf(s);-floatString s 12.3; float num Float.parseFloat(s);或Float numObj Float.valueOf(s);支持科学计数法如1.23e2doubleString s 12.345; double num Double.parseDouble(s);或Double numObj Double.valueOf(s);-booleanString s true; boolean flag Boolean.parseBoolean(s);或Boolean flagObj Boolean.valueOf(s);非true忽略大小写都返回falsecharString s A; char ch s.charAt(0);字符串转单个字符无parseChar方法byteString s 127; byte num Byte.parseByte(s);或Byte numObj Byte.valueOf(s);byte范围-128~127shortString s 32767; short num Short.parseShort(s);或Short numObj Short.valueOf(s);short范围-32768~327672. 基本数据类型 → 字符串3种通用方式方法1拼接空字符串最简单可读性高inta123;Stringsa;booleanflagtrue;Strings2flag;方法2使用String.valueOf()推荐无异常风险inta123;StringsString.valueOf(a);longb123456;Strings2String.valueOf(b);floatf12.3f;Strings3String.valueOf(f);方法3各包装类的toString()方法inta123;StringsInteger.toString(a);doubled12.345;Strings4Double.toString(d);bytebt10;Strings5Byte.toString(bt);最后小结今天的知识点看似基础但都是面试和开发中的高频坑点别混淆和equals重写equals必重写hashCode包装类的自动拆装箱是编译期语法糖128陷阱要记牢基本类型和字符串互转要熟练注意NumberFormatException异常基础不牢地动山摇慢慢啃慢慢记Java路还长