资讯动态

十二、常用类

发布时间:2026/10/16 12:24:03 来源:尧图企业网站定制
一、Object 类包java.lang所有类的直接 / 间接父类Object 引用可以接收任意对象它的所有方法所有类都可使用。常用方法1.getClass返回对象实际运行类型多用于判断两个对象实际类型是否一致对象1.getClass()对象2.getClass()Animal a1 new Cat(); Animal a2 new Dog(); System.out.println(a1.getClass() a2.getClass());//false2.hashCode()返回对象哈希码整数由对象堆内存十六进制地址转为十进制不同对象一般哈希码不同3.toString()返回对象字符串表现形式用途打印展示对象信息子类一般重写把对象全部属性拼接成字符串返回和 getter 区别get 获取单个属性保留原数据类型toString 返回全部属性拼接的 String 字符串public String toString(){ return namename,ageage; }equals(Object 0)Object 原生源码public boolean equals(Object obj){return (thisobj);}原生是比较地址和equals区别equals(Object o)基本数据类型比较数值不能使用引用类型比较对象地址判断是否同一个对象Object 原生等价于比较地址重写后比较对象内容重写 equals 的标准步骤public boolean equals(Object obj){ //1. 判断是不是同一个对象 if(this obj) return true; //2. 判断obj不为null if(obj null) return false; //3. 判断实际对象类型一致 if(this.getClass() ! obj.getClass()) return false; //4. 强转 Student s (Student)obj; //5. 属性对比基本类型用引用类型用equals return this.age s.age this.name.equals(s.name); }5.finalize()JVM 垃圾回收 GC 时自动调用垃圾对象无任何引用指向的对象GC 触发①自动内存不足时回收全部垃圾对象②手动提示System.gc()只是通知 GC不一定立刻执行注意执行时机不可控不要写核心业务代码二、包装类基本数据类型对应的引用类型基本类型与包装类对照表基本类型包装类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean类型转换以 Integer 为例1.int ↔ Integerint→Integernew Integer(12)/Integer.valueOf(12)Ingeter→int:i.intValue()2.String↔ IntegerString→Integernew Integer(123)/Integer.valueOf(123)Integer→Stringi.toString()/i3.int ↔ Stringint→StringaString→int:Integer.parseInt(123)字符串必须纯数字否则抛出NumberFormatException数字格式异常自动装箱基本类型直接赋值包装类Integer i12;底层调用Integer.valueOf(int)自动拆箱包装类直接赋值基本类型int ai;valueOf缓存范围-128~127该区间直接取缓存对象区间外new新对象Integer i1 12; Integer i2 12; System.out.println(i1i2); //true取自缓存 Integer i3 150; Integer i4 150; System.out.println(i3i4); //false创建两个新对象开发场景实体类属性建议用包装类可以区分0和null区分有效数据与未赋值三、创建字符串两种方式1.String s1hello;只在字符串常量池创建1个对象2.String s2new String(world);堆内存创建对象常量池创建对象一共2个对象常量池已有则不再重复创建String常用API方法作用异常说明char charAt(int index)根据下标获取字符下标越界抛出StringIndexOutOfBoundsExceptionboolean contains(String str)判断是否包含子串boolean equals()比较字符串内容开发必须用 equals❌不要用 比较字符串内容int length()获取字符串长度数组是.length属性注意区分String trim()去除字符串前后空格String[] split(String str)按照分隔符切割字符串返回字符串数组遍历字符串示例String s hello; for(int i0;is.length();i){ char c s.charAt(i); System.out.println(c); }String不可变性1.String字面量是常量拼接修改不会改变原字符串会生成新字符串副本2.频繁拼接效率低3.特殊String sab;编译期编译器直接优化为ab只生成1个对象常量相加编译优化四、可变字符串StringBuffer/Stringbuilderjava.lang类版本线程安全效率StringBufferJDK1.0✅线程安全慢StringBuilderJDK5.0❌线程不安全快【优先使用】构造方法new StringBuilder(); //空字符串 new StringBuilder(abc); //传入初始字符串核心方法append内容拼接内容不会产生新对象原地修改拼接效率远高于String面试题String、StringBuilder、StringBuffer区别1.String不可变拼接产生大量新对象效率低线程安全2.StringBuilder可变拼接效率高线程0不安全单线程推荐3.StringBuffer可变拼接效率高线程安全多线程使用五、BigDecimal类java.math解决浮点数计算精度丢失问题做精确小数运算1.构造推荐传入字符串new BigDecimal(0.1),不要直接传double2.四则运算方法返回新BigDecimal对象bd1.add(bd2); //加法 bd1.subtract(bd2); //减法 bd1.multiply(bd2); //乘法 //除法参数2保留小数位数参数3四舍五入模式 bd1.divide(bd2,2,BigDecimal.ROUND_HALF_UP);

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑