@
String类的valueOf方法可以把任意类型的数据转换成字符串(字节数组除外)
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);
十进制→其他进制
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);
装箱 : 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());
}
}
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 类在对象中包装一个基本类型 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包装类
原文:https://www.cnblogs.com/popo33/p/13221901.html