【JavaSE】基本类型包装类(以Integer代表)
@
构造方法
- public Integer(int value)
- public Integer(String s) 数字字符串转换成integer
String和int的相互转换
int→String
- s = "" + number;
- String.valueOf(number)
String类的valueOf方法可以把任意类型的数据转换成字符串(字节数组除外)
- Integer.toString(number)
String→int
-
new Integer(s).intValue()
-
Integer.parseInt(String s)
Integer ii = new Integer("123");
int i = ii.intValue();
System.out.println(i);
String s = "555";
int i = Integer.parseInt(s);
String s2 = "hello";// s 必须是数字字符串才行!这样是错误的
int i2 = Integer.parseInt(s2);//java.lang.NumberFormatException: For input string: "hello"
System.out.println(i2);
基本进制转换
- Integer.toBinaryString(int i)
- Integer.toOctalString(int i)
- Integer.toHexString(int i)
十进制→其他进制
public static String toString(int i, int radix)
public static String toString(100, 8);
其他进制→十进制
public static int parseInt(String s, int radix)
public static int parseInt("100", 2);
JDK5新特性:自动拆装箱
装箱 : Integer.valueOf(int x)
拆箱 : ii.intValue()
/**
* 自动装箱:把基本类型转换为包装类型
* 自动拆箱:把包装类型转换为基本类型
*/
public class IntegerDemo {
public static void main(String[] args) {
// 定义一个 int类型 的包装类类型变量 i
Integer i = 100;
i += 200;
System.out.println("i : " + i);
//通过反编译后的代码
// Integer i = Integer.valueOf(100); //自定装箱
// i = Integer.valueOf(i.intValue() + 200); //自动拆箱,再自动装箱
// System.out.println(new StringBuilder("i : ").append(i).toString());
}
}
integer面试题
valueOf 装箱时的源码如下:
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
由此可知,valueOf会将常用的值(-128 to 127)cache起来。当 i 值在这个范围时,会比用构造方法Integer(int) 效率和空间上更好。所以在使用 == 号判断时会出现以下问题!
public class IntegerDemo2 {
public static void main(String[] args) {
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); //false
System.out.println(i1.equals(i2)); //true
System.out.println("----------------------");
Integer i3 = new Integer(128);
Integer i4 = new Integer(128);
System.out.println(i3 == i4); //false
System.out.println(i3.equals(i4)); //true
System.out.println("-----------------------");
Integer i5 = 127;
Integer i6 = 127;
System.out.println(i5 == i6); //true
System.out.println(i5.equals(i6));//true
System.out.println("------------------------");
Integer i7 = 128;
Integer i8 = 128;
System.out.println(i7 == i8); //false
System.out.println(i7.equals(i8));//true
System.out.println("------------------------");
}
}
new 关键字
始终都会开辟新的内存地址指向,只有第三对 127 的值是 调用了自动装箱的valueOf()
方法从缓冲区
中返回的对象引用,是同一个内存地址。
Character包装类
Character 类用于对单个字符进行操作。
Character 类在对象中包装一个基本类型 char 的值
// 原始字符 'a' 装箱到 Character 对象 ch 中
Character ch = 'a';
// 原始字符 'x' 用 test 方法装箱
// 返回拆箱的值到 'c'
char c = test('x');
-
public static boolean isUpperCase(char ch)
-
public static boolean isLowerCase(char ch)
-
public static boolean isDigit(char ch)
-
public static char toUpperCase(char ch)
-
public static char toLowerCase(char ch)
-
boolean isLetter(char ch)
判断指定字符是否为字母。
-
boolean isWhitespace(char ch)
判断指定字符是否为字母。
案例:统计字符串中大小写及数字出现的次数
/**
* 统计字符串中的大写字母、小写字母、数字的个数
*/
public class String2character {
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[] chars = line.toCharArray();
for (int i = 0; i < chars.length ;i++){
if (Character.isUpperCase(chars[i])){
bigCount ++;
}else if (Character.isLowerCase(chars[i])){
smallCount ++;
}else if (Character.isDigit(chars[i])){
numberCount ++;
}
}
System.out.println("大写字母 " + bigCount);
System.out.println("小写字母 " + smallCount);
System.out.println("数字字母 " + numberCount);
}
}
-
Xxx.parseYyy的方法都是把包装类Xxx转为普通类型Yxx
-
Xxx.yyyValue()都是把xxx转为普通类型yyy
-
Xxx.valueOf(yyy)的方法都是yyy转化为Xxx包装类