一、基础类型间的转换
1 public class TransferTest { 2 public static void main(String[] args) { 3 4 //String转为int: 两种方法 5 String str = "100"; 6 int a1 = Integer.valueOf(str); 7 int a2 = Integer.parseInt(str); 8 9 //int转为String: 三种方法 10 int a = 100; 11 String str1 = String.valueOf(a); 12 String str2 = Integer.toString(a); 13 String str3 = "" + a; 14 15 //long/Long转为String 16 long l1 = 1001L; 17 Long l2 = 100L; 18 String s1 = String.valueOf(l1);//String.valueOf(l2) 19 String s2 = Long.toString(l1);//Long.toString(l2); 20 21 //long转为Long 22 l2 = l1;//自动装箱拆箱 23 System.out.println(l2); 24 l2 = Long.valueOf(l1); 25 26 //Long转为long 27 l1 = l2.longValue(); 28 29 //String转为long 30 String number = "1234567890"; 31 //方法一:调用Long类型的parseLong方法 32 long num1 = Long.parseLong(number); 33 //方法二:强制转换 34 long num2 = new Long(number); 35 //方法三:先转换Long类型,再使用longValue方法转为long 36 long num3 = Long.valueOf(number).longValue(); 37 38 /** 39 * Long.ValueOf("String")与Long.parseLong("String")的区别: 40 * Long.ValueOf("String")返回Long包装类型 41 * Long.parseLong("String")返回long基本数据类型 42 */ 43 44 //long转为int 45 Long n1 = 1000 * 100 * 85900L; 46 int m1 = n1.intValue(); 47 48 //或者 49 long n2 =1000 * 100 * 85900L; 50 int m2 = (int)n2; 51 int m3 = Math.toIntExact(n2);//long向int强转可能会出现数据溢出,Math.toIntExact()方法更为安全,在溢出的情况下会抛出ArithmeticException 52 53 //int和Integer互换 54 //convert i(int) to j(Integer) 55 int i = 0; 56 Integer j = Integer.valueOf(i); 57 58 //convert t(Integer) to n (int) 59 Integer t = 10; 60 int n = t.intValue(); 61 62 //char转为int 63 char ch = '8'; 64 int b1 = ch - '0'; 65 int b2 = ch - 48; 66 //使用包装类: 67 Character ch2 = new Character(ch); 68 int b3 = Integer.parseInt(ch2.toString()); 69 int b4 = Integer.parseInt(Character.toString(ch2)); 70 71 //int转为char 72 char ch1 = (char) (a + 48); 73 74 //String转为char数组 75 String s = "abcd"; 76 char[] chs = s.toCharArray(); 77 //String取单个字母 78 s.charAt(0); 79 80 //char转为String 81 String str10 = String.valueOf(ch); 82 String str20 = Character.toString(ch); 83 84 //char数组转为String 85 char[] chars = {'a', 'b', 'c', 'd'}; 86 String str11 = String.valueOf(chars); 87 String str21 = String.valueOf(chars[0]); 88 89 90 } 91 }
二、Integer.parseInt(s)与Integer.valueOf(s)的区别
1、Integer.parseInt(s)用法
1 String s1 = "1000"; 2 String s2 = "1000"; 3 int n1 = Integer.parseInt(s1); 4 int n2 = Integer.parseInt(s2); 5 if (n1 == n2) { 6 System.out.println(true); 7 }
输出:
Integer.parseInt(s)的作用就是把字符串s解析成有符号的int基本类型。
2、Integer.valueOf(s)用法
1 String s = "123"; 2 Integer integer1 = Integer.valueOf(s); 3 4 int i = 345; 5 Integer integer2 = Integer.valueOf(i); 6 System.out.println("integer1 : " + integer1); 7 System.out.println("integer2 : " + integer2);
输出:
Integer.valueOf(s)把字符串s(或int基本类型)解析成Integer对象类型,返回的integer 可以调用对象中的方法。
3、Integer.parseInt(s)与Integer.valueOf(s)的区别
1 //Integer.parseInt 2 String s3 = "10000"; 3 if (Integer.parseInt(s3) == Integer.parseInt(s3)) { 4 System.out.println(true); 5 } 6 7 //Integer.valueOf:当字符串对应的整数值在 -128~127之间 8 String s4 = "100"; 9 Integer i1 = Integer.valueOf(s4); 10 Integer i2 = Integer.valueOf(s4); 11 if (i1 == i2) { //两个对象相等 12 System.out.println("i1 == i2"); 13 } 14 if (i1.equals(i2)) { //两个对象中的value值相等 15 System.out.println("i1.equals(i2)"); 16 } 17 18 19 //Integer.valueOf:当字符串对应的整数值不在-128~127之间 20 String s5 = "1000"; 21 Integer i3 = Integer.valueOf(s5); 22 Integer i4 = Integer.valueOf(s5); 23 if (i3 != i4) { //两个对象不相等 24 System.out.println("i3 != i4"); 25 } 26 if (i1.equals(i2)) { //两个对象中的value值相等 27 System.out.println("i3.equals(i4)"); 28 }
输出:
Integer.parseInt(s)解析同一个字符串得到的int基本类型数据是相等的,可以直接通过“==”进行判断是否相等。
Integer.valueOf(s)多次解析相同的一个字符串时,得到的是Integer类型的对象,得到的对象有时是同一个对象,有时是不同的对象,需根据要解析字符串的整数值大小进行决定:如果字符串对应的整数值在 -128~127之间,则解析出的Integer类型的对象是同一个对象;如果字符串对应的整数值不在-128~127之间,则解析出的Integer类型的对象不是同一个对象。不管对象是否相等,对象中的value值是相等的。
另外,int是基本类型,不含有equals方法,所以只能用“==”比较,基本类型用“==”比较的是两个值的大小。
为什么Integer.valueOf(s)会出现这种情况呢?
这是由于JDK中源码已经定义好的。由于在-128~127之间的整数值用的比较频繁,当每次要创建一个value值在-128~127之间的Integer对象时,直接从缓存中拿到这个对象,所以value值相同的Integer对象都是对应缓存中同一个对象。-128~127之外的整数值用的不是太频繁,每次创建value值相同的Integer对象时,都是重新创建一个对象,所以创建的对象不是同一个对象。这个从JDK中源码可以看出:
1 /** 2 * 对外提供的Integer.valueOf方法 3 */ 4 public static Integer valueOf(String s) throws NumberFormatException { 5 return Integer.valueOf(parseInt(s, 10)); 6 } 7 8 public static Integer valueOf(int i) { 9 //IntegerCache.low为 -128; IntegerCache.high默认为127,但可以在JVM进行配置,一般默认就是127 10 if (i >= IntegerCache.low && i <= IntegerCache.high) 11 //如果i在-128~127之间,从缓存中取对象 12 return IntegerCache.cache[i + (-IntegerCache.low)]; 13 //如果i不在-128~127之间,重新创建一个对象 14 return new Integer(i); 15 }
流程图:
结论:
1、Integer.valueOf返回包装好的Integer对象,且有-128~127会缓存的限制,Integer.parseInt只是返回int值
2、Integer.parseInt只接受String类型的参数,Integer.valueOf可以接收int和String(包装int为Integer)
参考:https://blog.csdn.net/u010502101/article/details/79162587