常用类 - 01
一. 基本类型包装类
【问】想要对基本类型数据进行更多的操作,怎么办?
【答】最方便的方式就是将其封装成对象。因为在对象描述中就可以定义更多的属性和行为对该基本数据类型进行操作。我们不需要自己去对基本类型进行封装,JDK已经为我们封装好了。
【概念】
- 装箱就是自动将基本数据类型转换为包装器类型
- 拆箱就是自动将包装器类型转换为基本数据类型
以Integer为例
【示例】
public class TestInteger {
public static void main(String[] args) {
// 属性值
System.out.println(“Integer类型最大值:” + Integer.MAX_VALUE);
System.out.println(“Integer类型最小值:” + Integer.MIN_VALUE);
// 构造方法
Integer int1 = new Integer(123);
Integer int2 = new Integer(“123”);
System.out.println(“构造方法传int参数:” + int1);
System.out.println(“构造方法传String参数:” + int2);
// 类型转换
// 基本类型之间转换
System.out.println(“Integer转byte类型:” + int1.byteValue());
System.out.println(“Integer转int类型:” + int1.intValue());
// 基本类型与字符串之间转换
System.out.println(“字符串123转成int:” + Integer.parseInt(“123”));
System.out.println(“字符串123转成Integer:” + Integer.valueOf(“123”));
// System.out.println(“字符串abc可以转成Integer类型吗?” + Integer.valueOf(“abc”));
}
}
二. 字符串类
字符串类主要包括String、StringBuilder、StringBuffer。 - String
String类是通过char数组来保存字符串的。char[]数组是final修饰的,所以String类型的变量值不可变。
String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法。
【示例】
public static void main(String[] args) {
// 不同构造方法声明String变量
String str1 = “天亮教育”;
String str2 = new String(“天亮教育”);
String str3 = “天亮”;
// 长度:length()
System.out.print(str1.length() >= str3.length() ? “str1长” : “str3长”);
// 判断是否以指定字符开头
if (str1.startsWith(str3)) {
// str3第一次出现在str1中的位置
int startIndex = str1.indexOf(str3);
// 截取子串
String str1Sub = str1.substring(startIndex, str3.length() - 1);
String str2Sub = str2.substring(startIndex, str3.length() - 1);
System.out.println(“两个字符串是否相等:” + str1Sub.equals(str2Sub));
}
}
} - StringBuilder
既然在Java中已经存在了String类,那为什么还需要StringBuilder和StringBuffer类呢?我们看个例子来分析一下。
public class StringDemo {
public static void main(String[] args) {
String str = “”;
for(int i=0;i<100;i++){
str += “hello”;
}
}
}
分析:
string += “hello”; 相当于将原有的string变量指向的对象内容取出与 “hello”做字符串相加操作再存进另一个新的String对象当中,再让string变量指向新生成的对象。浪费时间和空间。StringBuilder类为可变字符串,解决String在字符变更方面的低效问题,低层依赖字符数组实现。
String和StringBuilder对比
都是 final 类, 都不允许被继承
String 长度是不可变的, StringBuffer长度是可变的 - StringBuffer
StringBuffer类的构造方法和用法与StringBuilder相同,可以认为是线程安全的StringBuilder。
StringBuilder和StringBuffer的对比
StringBuilder速度快,线程不安全的
StringBuffer线程安全的
StringBuffer、StringBuilder 长度是可变的