Groovy 数据类型 - Java 类型——专有类型和引用类型

Java对专有类型(比如int/double/char/byte)和引用类型(比如 Object/String)采用不同的处理方式,java有固定的专有类型,并且它们是值类型——这种类型的变量的值实际上只是一个数字(或者字符,或者true/false值),在java 中不能创建自定义的值类型。

引用类型(除了专有类型之外的任何类型)——这种类型的变量实际上是指向一个对象。 有C/C++背景的读者也许把引用类型想象成指针——这是相似的概念。如果改变引用类型的 变量的值,这是没有改变到先前引用的对象——这仅仅是改变变量本身,让这个变量引用一
个不同的对象,或者根本不引用任何对象。

不能在专有类型上进行方法调用,并且在java中也不能像java.lang.Object对象一 样对待专有类型,在使用容器的时候不能处理专有类型时特别痛苦,比如java.util.ArrayList。java的每个专有类型都有一个相应的包装类型,这个包装类型是一个用来存储专有类型值的引用类型,例如:int的包装类型是java.lang.Integer。 另一方面,比如在32 或者ab中的星号“*”操作符不是任何引用对象都支持,而是仅仅支持专有类型( + 号除外,字符串支持 + 号),作为一个为什么这么痛苦的例子,让我们考虑有两组整数列表的例子,并且希望将这两组数字加起来之后放在第三个列表中,java代码也许是这样的:// Java code! ArrayList results = new ArrayList(); for (int i=0; i < listOne.size(); i++) { Integer first = (Integer)listOne.get(i); Integer second = (Integer)listTwo.get(i); int sum = first.intValue()+second.intValue(); results.add (new Integer(sum)); } Java5的新特性会使这个工作简单一些,但是仍旧有两种类型密切关联(int和Integer),这导致了这个加法的复杂性,java这么处理的理由是:C的遗传并且基于性能上的考虑,groovy的答案是将更多的工作留给计算机,让程序员的工作更少。