java包装类
*1.为什么要有包装类?
-
1)基本数据类型有需求:调用属性,调用方法等—》包装类;
-
2)有些场合只能用引用数据类型,这个时候如果要操作基本数据类型,就要把它封装成对象—》包装类;
-
3)数值类型转换成字符串类型—》包装类;
*2.包装类—>针对基本数据类型的。 -
8种基本数据类型—》 8种包装类;
-
*3.包装类:
-
Integer—》int;
-
Double—》double;
-
Byte—》byte;
-
Short—》short;
-
Character—》char;
-
Long—》long;
-
Float—》float;
-
Boolean—》boolean;
*4.包装类相比于其它类,有一个显著的特点: -
自动装箱和自动拆箱
-
Integer n3=1234;//自动装箱;基本数据类型—>引用数据类型;隐式调用Integer n3=new Integer(1234);
int i=n3+10;//自动拆箱;引用数据类型—>基本数据类型;隐式调用n3.intValue();//自动装箱和自动拆箱;
Integer n3=1234;//自动装箱;基本数据类型—>引用数据类型;隐式调用Integer n3=new Integer(1234);
int i=n3+10;//自动拆箱;引用数据类型—>基本数据类型;隐式调用n3.intValue();
System.out.println(“i=”+i);
//Integer和字符串类型的相互转换;
String str=“123”;//字符串必须是数字格式的,否则会报异常: java.lang.NumberFormatException。
int a=Integer.parseInt(str);
System.out.println(a+10); int b=98;
String str1=String.valueOf(b);
System.out.println(str1);
String和StringBuilder类
String
/*
*(1)String s1=“abc”;先去常量池里找,如果"abc"已经存在,就指向它;如果不存在,就创建。 -
String s2=“abc”;
-
System.out.println(s1==s2);//true; System.out.println(s1.equals(s2));//true;
(2) String s3=new String(“abc”);在堆内存开辟空间;
String s4=new String(“abc”);
-
System.out.println(s3==s4);//false System.out.println(s3.equals(s4));//true
(3)String在底层是一个char类型的数组;
/
/
*String的常用方法;
*(1)字符串是一个【不可变】的字符序列;
*
*1.查:
- 1)获取某段内容的索引位置:str.indexOf()
-
str.lastIndexOf();
- 2)获取某个索引位置的内容:str.charAt();
- 3)str.length();
*2.判断:
- str.startsWith();
- str.endsWith();
- str.contains();
- str.isEmpty();
- str.equals();
- str.equalsIgnoreCase();
*3.比较:
- str.compareTo();
- str.compareToIgnoreCase();
*4.改;
- str.substring();
- str.replace();
- str.concat();
- str.trim();
- str.toUpperCase();
- str.toLowerCase();
*5.转换:
- str.split();
- str.toCharArray();
/
StringBuilder
/
*StringBuilder:1.底层也是字符数组;
-
2.是【可变的】字符序列;
*1.String—》StringBuilder
-
String str="Hello"; StringBuilder s=new StringBuilder(str);
2.最常用方法:
s.append(“Hello”);
3.StringBuilder—》String
String str1=s1.toString();
*
/
/
*StringBuilder的常用方法;
*s.append(“Hello World”);
*s.delete(3, 6);//含头不含尾;
*s.insert(3, “perfect”);
*s.replace(3, 11, “good”);//含头不含尾;
*s.reverse();
*
*
*
*
*/
1.StringBuilder:底层是一个字符数组;
2.StringBuilder : 初始数组长度是固定的;
s.append(str);
每次添加:判断当前数组长度是否能容下添加后的内容;
如果不能:(1)生成一个新的更长的数组;
(2)把旧数组的内容copy到新数组里去;
(3)把数组引用指向新数组;
(4)把新内容添加到新数组里。
3.(1) s.length():数组被占用的长度;
(2) s.capacity():数组的总长度;
*StringBuffer和StringBuilder:
*1.方法相同,可以替换;
*2.StringBuffer早期版本的,StringBuilder后来版本的(jdk1.5);
*3.StringBuffer重安全,轻效率;StringBuilder重效率,轻安全;
- StringBuffer:synchronized,线程同步;
- StringBuilder:没有synchronized,线程非同步;
*4.建议用StringBuilder。