包装类的分类
包装类和基本数据的转换
演示包装类和基本数据类型的相互转换,这里以int和Integer演示。
1)jdk5前的手动装箱和拆箱方式,装箱:基本类型->包装类型,反之,拆箱
2)jdk5以后(含jdk5)的自动装箱和拆箱方式
3)自动装箱底层调用的是valueOf方法,比如Integer.valueOf()
4)其它包装类的用法类似,
演示 int <–> Integer 的装箱和拆箱
jdk5 前是手动装箱和拆箱
手动装箱 int->Integer
int n1 = 100;
Integer integer = new Integer(n1);
Integer integer1 = Integer.valueOf(n1);
手动拆箱 Integer -> int
int i = integer.valueOf(n1);
自动装箱 int->Integer
Integer integer2 = n2;
底层使用的是
Integer.valueOf(n2)
自动拆箱
Integer->int
int n3 = integer2;
底层仍然使用的是valueOf
Integer主要是看范围 -128 ~ 127 就是直接返回 ,否则,就 new Integer(xx)
Integer 类和 Character
System.out.println(Integer.MIN_VALUE); //返回最小值
System.out.println(Integer.MAX_VALUE);//返回最大值
System.out.println(Character.isDigit(‘a’));//判断是不是数字
System.out.println(Character.isLetter(‘a’));//判断是不是字母
System.out.println(Character.isUpperCase(‘a’));//判断是不是大写
System.out.println(Character.isLowerCase(‘a’));//判断是不是小写
System.out.println(Character.isWhitespace(‘a’));//判断是不是空格
System.out.println(Character.toUpperCase(‘a’));转成大写
System.out.println(Character.toLowerCase(‘A’));//转成小写
String 类
String 类的理解和创建对象
创建 String 对象的两种方式
1)方式一:直接赋值 String s= "wyx”
2)方式二:调用构造器 String s = new String(“wyx”);
区别
方式一:直接赋值 String s= "wyx";
方式二:调用构造器 String s2 = new String("wyx");
1.方式一:先从常量池查看是否有"wyx"数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s最终指向的是常量池的空间地址
2.方式二:先在堆中创建空间,里面维护了value属性,指向常量池的wyx空如果常量池没有"wyx",重新创建,如果有,直接通过value指向。最终指的是堆中的空间地址。
3.画出两种方式的内存分布图
字符串的特性
说明
1)String是一个final类,代表不可变的字符序列
2)字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的1.以下语句创建了几个对象?画出内存布局图。
String s1 = "hello";
s1="haha"; //1min
/创建了2个对象
小结:
底层是 StringBuilder sb = new StringBuilder();
sb.append(a); sb.append(b);sb是在堆中,
并且append是在原来字符串的基础上追加的
重要规则:
String c1 = “ab” + “cd”;常量相加,看的是池。
String c1 = a+b;变量相加,是在堆中
String 类的常见方法
说明
String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因此jawa设计者还提供了StringBuilder 和 StringBuffer 来增强String的功能并提高效率。
String 类的常见方法一览
StringBuffer 类
基本介绍
- Java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删
- 很多方法与String相同,但StringBuffer是可变长度的。
- StringBuffer是一个容器。
String VS StringBuffer
- String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低//private final char value[];
- StringBuffer保存的是字符串变量,里面的值可以更改,每次
- StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率较高/char[] value;//这个放在堆
String 和 StringBuffer 相互转换
//方式 1 使用构造器
//注意: 返回的才是 StringBuffer 对象,对 str 本身没有影响
StringBuffer stringBuffer = new StringBuffer(str);
//方式 2 使用的是 append 方法
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 = stringBuffer1.append(str)
StringBuffer ->String
//方式 1 使用 StringBuffer 提供的 toString 方法
String s = stringBuffer3.toString();
//方式 2: 使用构造器来搞定
String s1 = new String(stringBuffer3)
StringBuilder 类
1)一个可变的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步(StringBuilder 不是线程安全)。该类被设计用作 StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类因为在大多数实现中,它比StringBuffer要快[后面测]。
2)在 StringBuilder上的主要操作是 append 和 insert方法,可重载这些方法,以接受任意类型的数据。
- StringBuilder 和 StringBuffer 均代表可变的字符序列,方法是一样的,所以使用和StringBuffer一样,
- StringBuilder 继承 AbstractStringBuilder 类
- 实现了 Serializable ,说明 StringBuilder 对象是可以串行化(对象可以网络传输,可以保存到文件)
- StringBuilder 是 final 类, 不能被继承
- StringBuilder 对象字符序列仍然是存放在其父类 AbstractStringBuilder 的 char[] value; 因此,字符序列是堆中
- StringBuilder 的方法,没有做互斥的处理,即没有 synchronized 关键字,因此在单线程的情况下使用 // StringBuilder stringBuilder = new StringBuilder()
String、StringBuffer 和 StringBuilder 的比较
1)StringBuilder 和 StringBuffer非常类似,均代表可变的字符序列,而且方法也一样
2)String:不可变字符序列,效率低,但是复用率高。
3)StringBuffer:可变字符序列、效率较高(增删)、线程安全,看源码
4)StringBuilder:可变字符序列、效率最高、线程不安全
5)String使用注意说明:
string s="a";//创建了一个字符串
s+="b";/实际上原来的"a"字符串对象已经丢弃了,现在又产生了一个字符串s+"b"(也就是"ab")。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能=>结论:如果我们对String做大量修改,不要使用String
String、StringBuffer 和 StringBuilder 的选择
Math 类
基本介绍
Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数
方法一览
Arrays 类
Arrays 类常见方法
System 类
System 类常见方法
1)exit退出当前程序
2)arraycopy:复制数组元素,比较适合底层调用,一般使用Arrays.copyOf完成复制数组
int[] src={1,2,3};
int[] dest = new int[3];
System.arraycopy(src, 0, dest, 0, 3);
3)currentTimeMillens:返回当前时间距离1970-1-1的毫秒数
4)gc:运行垃圾回收机制 System.gc();
BigInteger 和 BigDecimal 类
应用场景:
1)Biglnteger适合保存比较大的整型
2)BigDecimal适合保存精度更高的浮点型(小数)
BigInteger BigDecimal常见方法
1)add加 2)subtract减
3)multiply乘 4) divide除