Java基础类型之间的转换

java

 一、基础类型间的转换

 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数据类型" title="基本数据类型">基本数据类型

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

以上是 Java基础类型之间的转换 的全部内容, 来源链接: utcz.com/z/393991.html

回到顶部