概述
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为例,我们可以:
- 用constructor来构建,可以传123,也可以传“123”。
- 调用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();
最后
以上就是自觉钥匙为你收集整理的Java-WrapperClass及其转化1.基本原理:2. 数据结构之间的转化(难记的)的全部内容,希望文章能够帮你解决Java-WrapperClass及其转化1.基本原理:2. 数据结构之间的转化(难记的)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复