byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
在这里我们主要对Integer和Character进行研究。
一、Integer
首先思考一个问题:需要将100 (整数默认十进制) 转换成二进制,八进制,十六进制...
查看API文档,Integer提供了静态功能:
public static String toBinaryString(int i)public static String toOctalString(int i)
public static String toHexString(int i)
需求:获取Integer的最值
public static final int MAX_VALUE(2的31次方-1)
public static final int MIN_VALUE(2的负31次方)
public class IntegerDemo {
public static void main(String[] args) {
System.out.println(Integer.toBinaryString(100));//二进制组成:有0和1组成
System.out.println(Integer.toOctalString(100));//组成规则:以0开头 0144
System.out.println(Integer.toHexString(100));//组成规则:0x开头 0-9,a-f
System.out.println("-----------------------");
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
}
}
Integer的构造方法:
public Integer(int value)
public Integer(String s)
public class IntegerDemo2 {
public static void main(String[] args) {
//创建一个Integer类对象
Integer i = new Integer(100);
Integer ii = 100 ; //底层实际代码执行的是:valueOf(int i) :该类中本身有一缓冲区的 :缓冲的值的范围:-128~127
System.out.println("i:"+i);
System.out.println("ii:"+ii);
System.out.println("-----------------");
//public Integer(String s)
//当前String类型的值是一个数字类型的字符串
Integer iii = new Integer("100");
System.out.println("iii:"+iii);//java.lang.NumberFormatException
}
}
这里的 Integer i = new Integer(100);和Integer ii = 100 ;其实是一样的,第二条语句实际上就是一个自动装箱的例子,编译器自动帮我们改进代码,改成第一条语句的样子。(这个等会具体讲)
这里还有一个很有趣的现象:
public class IntegerDemo2 {
public static void main(String[] args) {
Integer a = 127;
Integer b = 127;
System.out.println(a==b);//true
System.out.println(a.equals(b));//true
Integer c = 128;
Integer d = 128;
System.out.println(c==d);//false
System.out.println(c.equals(d));//true
}
}
为什么相同的情况下会出现不同的结果呢?
这就与上面说的缓冲值有关系了,处于[-128,127]之间的数,虽然被装箱,但在实际的处理的过程中仍然当做基本数据类型来处理,因为这样可以提高效率。
如何将int转换为String类型
valueOf(int i) ;
将String转换为int类型
static int parseInt(String s);
public class IntegerDemo3 {
public static void main(String[] args) {
//int---->String
//定义一个int类型的变量
int num = 100 ;
//方式1: 字符串拼接
String str = "" + num ;
System.out.println("str:"+str);
//方式2:valueOf(int i) ;
//int -->Integer--->String
Integer i = Integer.valueOf(num) ;
String str2 = i.toString() ;
System.out.println("str2:"+str2);
//方式3:静态toString(int i): static String toString(int i )
String str3 = Integer.toString(num) ;
System.out.println("str3:"+str3);
System.out.println("----------------------");
//String--->int
String s = "100";
//方式1:String-->integer--->int
Integer ii = new Integer(s);
//public int intValue()
int num2 = ii.intValue() ;
System.out.println("num2:"+num2);
//方式2:(常用)public static int parseInt(String s)
int num3 = Integer.parseInt(s) ;
System.out.println("num3:"+num3);
}
}
JDK5 以后提供了自动拆装箱
可以将Integer-->拆箱 int类型
可以将int类型--->装箱 Integer类型
JDK5 还提供了哪些特性:
泛型,可变参数,增强for循环(在集合中)等等...这些我们之后再讲
看个自动拆装箱的例子:
public class IntegerDemo4 {
public static void main(String[] args) {
//创建Integer对象
Integer i = 100 ;
i += 200; //先拆箱(Integer-->int),后装箱(int值---->Integer)
System.out.println("i:"+i);
}
}
用反编译工具查看,发现编译器实际上执行的是如下的代码:
Integer i = Integer.valueOf(100);
i = Integer.valueOf(i.intValue() + 200);//(int类型的100 +200)
System.out.println((new StringBuilder("i:")).append(i).toString());
这实际上就是自动拆装箱的过程。
二、Character
Character 类在对象中包装一个基本类型 char 的值。Character 类型的对象包含类型为 char 的单个字段。
以确定字符的类别(小写字母,数字,等等)
构造方法:
public Character(char value)
Character类的判断功能:
public static boolean isDigit(char ch)确定指定字符是否为数字public static boolean isLowerCase(int ch): 确定是否是小写字母字符
public static boolean isUpperCase(int ch):确定是否大写字母字符
两个转换功能:
public static int toLowerCase(int codePoint)public static int toUpperCase(int codePoint)
需求:键盘录入一个字符串,利用Charater类的这三个判断功能统计当前字符串中大写字母字符,小写字母字符,数字字符的个数(不考虑其他字符)
public class CharacterDemo3 {
public static void main(String[] args) {
//定义三个统计变量
int bigCount = 0 ;
int smallCount= 0 ;
int numberCount = 0 ;
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//接收数据
System.out.println("请输入一个字符串:");
String line = sc.nextLine() ;
//把字符串转成字符数组
char[] chs = line.toCharArray() ;
//遍历,取出每一个字符
for(int x = 0 ; x < chs.length ; x ++) {
char ch = chs[x] ;
//判断当前ch字符是否为大写字母字符,数字字符,小写字母字符
if(Character.isUpperCase(ch)) {
bigCount ++;
}else if(Character.isDigit(ch)) {
numberCount++;
}else if(Character.isLowerCase(ch)) {
smallCount++ ;
}
}
System.out.println("大写字母字符有:"+bigCount+"个");
System.out.println("小写字母字符有:"+smallCount+"个");
System.out.println("数字字符有:"+numberCount+"个");
}
}
Integer和Character的包装类到此就结束了,其他的包装类大家可以自己学习学习。