-
double -----> Double
基本数据类型----->引用数据类型--->继承关系
byte Byte Number ----->Object
short Short
int Integer
long Long
float Float
double Double Number ----->Object
char Character Object
boolean Boolean
2.为什么要引入包装类
-
面向对象----操纵类,将基本数据类型封装成为对应的包装类,就是为了获取某些属性,方法。
-
集合,特点:只能存放引用数据类型
3.是不是有了包装类,就不用基本数据类型?不是的,各有应用场合
-
基本数据类型:形参,局部变量。优势,节省内存
4.Integer类
-
使用Integer不需要导包 因为它是属于java.lang下的 父类为Number---->Object
-
已实现的接口:Serializable,Comparable<Integer>
-
Integer底层就是一个int类型数据,就是对这个数据进行的封装 private final int value;
public class 包装类 {
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE+1);//-2147483648
System.out.println(Integer.MIN_VALUE-1);//2147483648
//必须用有参构造创建,参数为int或者String
Integer i1 = new Integer(12);
Integer i2 = new Integer("12");//如果是"abc",会抛出数字格式异常
//自动装箱:int--->Integer
Integer i3 = 12;//反编译可得 Integer i3 =Integer.valueOf(12);
//自动拆箱:Integer--->int
int i4 = i1;
?
//各种方法
System.out.println(i1.compareTo(i2)); // return (x<y)? -1:((x==y)?0:1); 小于-1,等于0,大于1
System.out.println(i1.equals(i2));//true
System.out.println(i1 == i2);//flase
Integer i5=12;
Integer i6=12;
Integer i7=129;
Integer i8=129;
System.out.println(i5 == i6);//true
System.out.println(i7 == i8);//false
//JDK1.5之后,对自动装箱来说,要是在-128,127中,直接返回给你数(从内部类中的一个缓存数组中获取)
//如果没在-128,127中,要开辟空间
int i9 = i1.intValue();//Integer--->int
int i10 = Integer.parseInt("13");//String--->int
}
}
String
-
String是常量,不可变 public final class String
-
String中通过char数组储存字符串 private final char value[];
public class String123 {
public static void main(String[] args) {
String s1 = "你好,世界!";//s1.value[你,好,,,世,界,!]
System.out.println(s1);
String s2 = new String("abc");
String s3 = new String(new char[]{‘a‘,‘c‘,‘b‘});
System.out.println(s1.length());//6
System.out.println(s1.isEmpty());// return value.length == 0;
System.out.println(s1.charAt(1));//好
String s4 = new String("abcdefg");
int num = s4.indexOf(‘f‘);//5
String s5 = s4.substring(2);
System.out.println(s5);//cdefg
System.out.println(s4.substring(2,5));//[2,5)--cde
String s6 = s2.concat(s4);
System.out.println(s6);//abcabcdefg
?
String s7 = s6.replace(‘a‘, ‘k‘);
System.out.println(s7);//kbckbcdefg
String s8 =" a b c ";
System.out.println(s8.trim());//去掉首尾空格符
}
}
StringBuilder
-
char[] value; int count;//value存储字符串,count 记录字符使用的数量
public class StringBuilder123 {
public static void main(String[] args) {
String str = "abc";//不可变字符串
StringBuilder sb1 = new StringBuilder();//可变字符串 默认为长度为16的数组
StringBuilder sb2 = new StringBuilder(23);
StringBuilder sb3 = new StringBuilder("abc");//创建一个3+16长度的数组,将参数数组copy进该对象数组中,count+=3
sb3.append("kkkkk");//abckkkk 数组长度为19 count+=5
sb3.append("tttttttttttttttttttttt");//超出原有长度,创建新数组,并将数据拷贝入新数组,长度为所需x*2+2.value指向新数组 count=x
//增删改查
StringBuilder s1 = new StringBuilder("nihaoyashijie");
s1.append("你好");//增 nihaoyashijie你好
s1.delete(3,6);//删除在[3,6)上的字符 nihashijie你好
s1.deleteCharAt(10);//删除位置在10的字符 nihashijie好
StringBuilder s2 = new StringBuilder("123456789");
s2.insert(3,"K");
System.out.println(s2);//改 插入 123K456789
s2.replace(3,5,"你好呀");
System.out.println(s2);//改 替换 123你好呀56789
s2.setCharAt(3,‘!‘);
System.out.println(s2);//改 替换 123!好呀56789
?
for (int i = 0; i < s2.length(); i++) {
System.out.print(s2.charAt(i)+" ");//查
}
System.out.println();
String s3 = s2.substring(2,4);//截取[2,4)返回的是一个新的String,对StringBuilder没有影响
System.out.println(s3);
System.out.println(s2);
}
}
StringBuilder与StringBuffer区别联系
-
StringBuilder JDK 1.5 效率高 线程不安全
-
StringBuffer JDK 1.0 效率低 线程安全