一、包装类(Wrapper)
由于基本数据类型性能不够,没有方法。因此可以把他们封装到相应的类里面,基本数据类型作为这个类的一个xxxValue属性。
针对八种基本数据类型定义相应的引用类型—包装类(封装类)
有了类的特点,就可以调用类中的方法,Java才是真正的面向对象。
说明:基本数据类型可以做运算,但没有方法。 对象方法多,但不能做运算,所以需要相互转换。
二、包装类的使用
Java提供了8种基本数据类型对应的包装类,使得基本数据类型的变量具有了类的特征
重点:基本数据类型、包装类、String三者之间的相互转换
2.1 基本数据类型 ——> 包装类 (有自动装箱了,了解就好)
语法: 包装类 对象名 = new 包装类(基本数据类型变量);
exp: int num1 =10;
Integer in1 = new Integer(num1);
2.2 包装类 ——>基本数据类型 (有自动拆箱了,了解就好)
基本数据都存放在包装后对象的xxxValue属性里面,因此调用包装类的xxxValue属性,就可还原基本数据类型。 xxx指具体的某个包装类
语法: 基本数据类型 变量名 = 包装类对象.xxxValue;
exp: int num1 = in1.intValue;
2.3 福利:JDK5 以后,自动装箱与自动拆箱
自动装箱语法:(有点像c++在包装类中重载了 = 运算符)
包装类 对象名 = 对应基本数据类型变量;
自动拆箱语法:
基本数据类型 变量名 = 包装类对象;
exp:
int num2 = 10;
Integer in1 = num2 ; //自动装箱,直接将num2 赋值给了in1 的 intValue属性
int num3 = in1; //自动拆箱,num3=10
2.4 基本数据类型,包装类——>String
方法一:连接运算符“+”
语法:String str变量 = 基本数据类型变量 + "";
方法二: 调用String的valueOf(各种基本数据类型变量)方法。
语法:String str变量 = String.valueOf(基本数据类型变量名);
说明:由于有自动装箱和自动拆箱,所以无所谓形参是对象 或者 基本数据类型。
exp: float f1= 12.3f;
String str2 = String.valueOf(f1);
2.5 String——>包装类,基本数据类型
方法:调用包装类的 Xxx.ParseXxx()方法。
语法: 基本数据类型 基本变量 = Xxx.ParseXxx(str);
exp:
String str1 = "123";
int num2 = Integer.parseInt(str1);
总结:
3、String 与数组 相互转换
3.1 String转char[ ]
语法: char [ ] 变量 = 字符串对象.toCharArray();
exp : String str1 = "abc123";
char[ ] charArray=str1.toCharArray() ; //将字符串"abc123" 转换成char字符 给cahrArray数组 即 'a','b','c','1','2','3'
3.2 char[ ] 转 String
语法: string 变量 = new String(char数组名); //直接用构造器实现转换
char [ ] arr = new char []{'h','e','l','l','o'};
String str2 = new String(arr); //此时 str2为 "hello"
编码和解码
3.3 String 转 byte[] //这里byte是字符对应的编码
编码:看得懂的图像,字符串——>字节(看得懂的——>看不懂的二进制数据)
解码:编码的逆过程,字节(看得懂的——>看不懂的二进制数据)——>看得懂的东西(比如字符串,图像)
编码:String——>byte[ ]:调用String的getBytes()
语法: byte[ ] 变量名 = string对象.getBytes(【编码集】);//使用指定默认字符集【指定编码集】,进行转换
exp:String str1 = "abc123中国";
byte[ ] bytes = str1.getBytes("gbk");//使用gbk字符集进行转换
3.4 byte[ ] 转String
解码:byte[]——>String 看不懂的数据流 转成 看得懂的字符串
语法:String 变量名 = new String(byte数组名【,指定字符集】);//使用默认【指定】字符集进行解码
exp:
String str1 = "abc123中国";
byte[ ] bytes = str1.getBytes(); //使用默认utf-8进行编码,结果是一堆数字
String str2 = new String(bytes);
注意:如果编码和解码用的字符集不同,就会出现乱码
