[Java基础] 常用类(十一)

一、包装类

针对八种基本数据类型相应的引用类型–包装类

1. 分类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2. 包装类和基本数据转换

  • jdk5前的手动装箱拆箱方式(装箱:基本类型->包装类型 ;拆箱:包装类型->基本类型
---手动装箱
int n = 100;
Integer integer = Integer.valueOf(n);
Integer integer = new Integer(n);

---手动拆箱
int n = integer.intValue();
  • jdk5以后(含jdk5)的自动装箱和拆箱方式
---自动装箱
Integer integer = n;

---自动拆箱
int n = integer;
  • 自动装箱底层调用的是valueOf方法

注意示例

Object obj = true ? new Integer(1) : new Double(2.0);
System.out.println(obj);	//1.0⚠️	三元运算符是一个整体

3. 包装类和String类型转换

包装类(Integer) —> String

Integer integer = 1;
//1⃣️
String s = integer + "" ;
//2⃣️
String s = integer.toString();
//3⃣️
String s = String.valueOf();

String —> 包装类(Integer)

String s = "123";
//1⃣️
Integer integer = Integer.parseInt(s);
//2⃣️
Integer integer = new Integer(s);

4. valueOf源码(Integer)

  1. 看范围,-128~127直接返回
  2. 否则,new Integer(i);
    @IntrinsicCandidate
    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
Integer integer = 128;
int i =128;
System.out.println(integer == i);//true⚠️
//只要有基本数据类型,就判断值

5. 包装类-常用方法

  • Integer.MIN_VALUE;-----------返回最小值
  • Integer.MAX_VALUE;----------返回最大值
  • Character.isDigit(‘a’);----------判断是否为数字
  • Character.isLetter(‘a’);--------判断是否为字母
  • Character.isUpperCase(‘a’);—判断是否大写
  • Character.isLowerCase(‘a’);—判断是否小写
  • Character.isWhitespace(‘a’);—判断是否空格
  • Character.toUpperCase(‘a’);—转换成大写
  • Character.toLowerCase(‘a’);—转换成小写

二、String类

1. 基本介绍

  • String对象用于保存字符串,一组字符序列
  • 字符串常量对象是用双引号括起的字符序列
  • 字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节

String常用构造器:

  1. String s1 = new String();
  2. String s2 = new String( String original );
  3. String s3 = new String( char[] a );
  4. String s4 = new String( char[] a, int startIndex, int count );

2. 创建String对象

方式一:直接赋值

String s = " abc ";
  • 先从常量池查看是否有"abc"数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s最终指向的是常量池的空间地址

方式二:调用构造器

String s = new String(" abc ");
  • 先在堆中创建空间,里面维护了value属性,指向常量池的"abc"空间,如果常量池没有"abc"重新创建;如果有,直接通过value指向。s最终指向的是堆中的空间地址

内存图

在这里插入图片描述

3. String类-常用方法

  • equals--------------内容是否相等(区分大小写)
  • equalsIgnoreCase—内容是否相等(忽略大小写)
  • length---------------获取字符个数,字符串长度
  • indexOf-------------获取字符在字符串中第一次出现的索引
  • lastindexOf----------获取字符在字符串中最后一次出现的索引
  • substring-----------截取指定范围的子串
  • trim-----------------去前后空格
  • charAt--------------获取某索引处的字符

4. 注意示例

String a = "abc";
String b = new String("def");
System.out.printlb(a == b.intern());//T
//intern方法最终返回的是常量池的地址
String s = "hello";
s = "haha";

---创建了2个对象⚠️
String s = "hello" + "hi";

---创建了1个对象⚠️编译器做了优化,直接生成"hellohi"
String a = "hello";
String b = "hi";

String c = a + b;
---变量相加,在堆//1⃣️

String d = "hello" + "hi";
---常量相加,在池//2⃣️

三、StringBuffer类

1. 基本介绍

  • java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删
  • 很多方法与String相同,单StringBuffer是可变长度的
  • StringBuffer是一个容器
  • StringBuffer实现了Serializable,即其对象可串行化(对象可以网络连接,可以保存到文件)
  • 直接父类是AbstractStringBuild,在父类value数组存放字符串内容,放在
  • StringBuffer是一个final类,不能被继承

2. String -VS- StringBuffer

  • Sting保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址效率较低
  • StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer类的更新实际上就是更新内容、不更改地址,效率高

3. String类型与StringBuffer类型转换

String —> StringBuffer

String s = "hello tom";
//1⃣️
StringBuffer sb = new StringBuffer(s);
//2⃣️
StringBuffer sb = new StringBuffer();
sb = sb.append(s);

StringBuffer —> String

StringBuffer sb = new StringBuffer("hi");
//1⃣️
String s = sb.toSring();
//2⃣️
String s = new String(sb);

4. StringBuffer类-常用方法

  • 增:append
  • 删:delete(start, end)
  • 改:replace(start, end, string)—左闭右开
  • 查:indexOf()
  • 插:insert()
  • 获取长度:length()

5. 注意示例

String s = null;
StringBuffer sb = new StringBuffer();
sb.append(s);	//输出"null"⚠️

StringBuffer sb = new StringBuffer(null);	//❌先.length()直接报错

四、StringBuilder类

1. 基本介绍

  • 可变的字符序列,此类提供一个与StringBuffer兼容的API,但不能保证同步(不是线程安全)
  • 字符缓冲区被单个线程使用的时候,建议用Stringbuilder,更快
  • StringBuilder实现了Serializable,即其对象可串行化对象可以网络连接,可以保存到文件
  • 直接父类是AbstractStringBuild,在父类value数组存放字符串内容,放在
  • StringBuilder是一个final类,不能被继承

2. String -VS- StringBuffer -VS- StringBuilder

  • String:不可变字符序列,效率低,复用率高
  • StringBuffer:可变字符序列,效率较高,线程安全
  • StringBuilder:可变字符序列,效率最高,线程不安全

3. 效率排名

StringBuilder > StringBuffer > String

4. 注意示例

  • 如果字符串存在大量的修改操作:一般使用StringBuffer 或 StringBuilder
  • 如果字符串存在大量的修改操作,并在单线程情况:使用StringBuilder
  • 如果字符串存在大量的修改操作,并在多线程情况:使用StringBuffer
  • 如果字符串很少修改,被多个对象引用:使用String(比如配置环境等)

五、Math类

1. 基本介绍

Math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根、三角函数等

2. Math类-常用方法

  • Math.abs();--------求绝对值
  • Math.pow();-------求幂
  • Math.ceil();--------向上取整(转换成double)
  • Math.floor();-------向下取整(转换成double)
  • Math.round();-----四舍五入
  • Math.sqrt();-------求开方(负数–>NaN)
  • Math.random();—求随机数(返回0 <= x < 1之间的小数)
  • Math.min();-------返回最小值
  • Math.max();-------返回最大值
  • 获取一个a-b之间的随机整数:int num = (int)(a + Math.random()*(b-a+1))

Date日期类、calendar日历类

System类

Arrays类

BigInteger类、BigDecimal类

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你怎么知道我头发乌黑浓密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值