Java-WrapperClass及其转化

java里的变量分为primitive type和reference type两种。primitive type是int, char, double啥的,reference type(Wrapper Class)就是Integer, String这些。

我一直对reference type互相转化有点记不住,看了几个视频学习了一下。发现是因为对reference type(Wrapper Class)原理就没有理解。

1.基本原理:

1.1. 8 种基本的wrapper class

在youtube上看了个视频。Wrapper Classes in Java | Core Java Tutorial
讲了这些wrapper class之间的extend, implement关系:
在这里插入图片描述
不同的wrapper class可以接受不同的参数,是因为他们分别有1个或多个constructor:
在这里插入图片描述

1.2. Boxing & UnBoxing

从primitive type到wrapper class, 叫做boxing
以Integer为例,我们可以:

  1. 用constructor来构建,可以传123,也可以传“123”。
  2. 调用valueOf()方法来构建。同样,可以传123,也可以传“123”。

在这里插入图片描述
从wrapper class到primitive type, 叫做unBoxing
可以调用wrapper class的方法.intValue()得到int,也可以调用wrapper class的方法.toString()得到String。
在这里插入图片描述
很多时候可以auto-boxing和auto-unboxing。
比如赋值或者给限定了type的list添加值的时候:

Integer number = 6;//6可以被compiler自动转化成Integer
List<Integer> numbers = new ArrayList<>();
numbers.add(5);//5可以被compiler自动转化成Integer

1.3. string <–> Wrapper <–> primitive 三者转换

下面是抄自:Java Tutorial # 20 | Integer, Double, Float -Wrapper Classes in Java

总体的转化关系是:
在这里插入图片描述

  • valueOf(): 从string到wrapper
  • parseXXX(): 从string到primitive

在这里插入图片描述
在这里插入图片描述
非十进制的要加一个额外的参数:
在这里插入图片描述

1.4. wrapper class是immutable的

另外,注意wrapper class是immutable的,除了constructor以外,其method都不能修改其内容。调用方法只能返回一个新的object。(返回str这个遥控器指向一个新的"HELLO" object)

String str = "Hello";
str.toUpperCase(); //此时str仍然是"Hello"
str = str.toUpperCase(); //此时str才是"HELLO"
Integer myInt = new Integer("12");//myInt这个遥控器指向heap中的12这个object
myInt = new Integer("13");//myInt这个遥控器指向heap中的13这个object
               //遥控器换了一个新的object来指向,object本身并没变化

2. 数据结构之间的转化(难记的)

下面的各种需求,都有多种方法,就写最简洁的一种(多了反而记不住呵呵)。先写这么多,之后刷题中随时补充。

1. ArrayList to Array

List<String> myList = new ArrayList<>();
myList.add("cat");
myList.add("dog");
myList.add("rabbit");
String[] strs = myList.toArray(new String[myList.size()]);

2. ArrayList to String

ArrayList<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
StringBuilder sb = new StringBuilder();
for (String s : list) {
    sb.append(s);
    sb.append("\t");
}
String myString = sb.toString();

3. Array <–> List

//Array to List
String[] sourceArray = {"a", "b", "c", "d", "e"};
List<String> targetList = Arrays.asList(myArray);
//List to Array
List<Integer> sourceList = Arrays.asList(0, 1, 2, 3, 4, 5);
Integer[] targetArray = sourceList.toArray(new Integer[sourceList.size()]);

4. Array <–> String

//Array to String
char[] charArr = new char[] { 'h', 'e', 'l', 'l', 'o' }; 
String myStr = Arrays.toString(charArr);
//String to Array
String str = "HelloKitty";
char[] chars = str.toCharArray();

5. String <–> StringBuilder

StringBuilder sb = new StringBuilder("myString");
String s = sb.toString();
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值