java里的变量分为primitive type和reference type两种。primitive type是int, char, double啥的,reference type(Wrapper Class)就是Integer, String这些。
我一直对reference type互相转化有点记不住,看了几个视频学习了一下。发现是因为对reference type(Wrapper Class)原理就没有理解。
在youtube上看了个视频。Wrapper Classes in Java | Core Java Tutorial 讲了这些wrapper class之间的extend, implement关系: 不同的wrapper class可以接受不同的参数,是因为他们分别有1个或多个constructor:
从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下面是抄自:Java Tutorial # 20 | Integer, Double, Float -Wrapper Classes in Java
总体的转化关系是:
valueOf(): 从string到wrapperparseXXX(): 从string到primitive非十进制的要加一个额外的参数:
另外,注意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本身并没变化下面的各种需求,都有多种方法,就写最简洁的一种(多了反而记不住呵呵)。先写这么多,之后刷题中随时补充。