Groovy(Java笨狗)系列--datatypes

  • Java’s type system—primitives and references(原始值和引用)
  1. 在Groovy中,一切都是对象。
  2. Java 区分primitive types (比如:int, double, char, and byte) and reference types (比如: Object and String)。
  3. 对于primitive types (比如:int, double, char, and byte),他们只能定义相应的变量类型,而且不会存在方法。
  4. reference types(除了primitive types的任何类型)。
  5. 另一方面,操作符,比如a+b,a*b..只支持原始类型而不支持引用类型(当然也有例外,比如”+“支持String)。
  6. 对于primitive types类型的操作,他们有相应的包装类型,当你从int到Integer,或者其他类型,都需要进行转换。
    // 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));
    }
     上面的代码进行了转换,得到相应的结果。那么看下Groovy对于一些都是对象这句话,是怎么做的,稍后会跟大家说下其中的原理。
    results.add (first.plus(second))
     上面的代码,其实没有任何的转换操作,很简单的运用了Groovy内置的方法来实现。
    // Java
    int sum = first.intValue()+second.intValue();
    results.add (new Integer(sum));
     
    //Groovy Code
    
    results.add (first + second)
     
  7. 为了使Groovy完全面向对象,Groovy中移除了primitive types,任何时候,你在Groovy代码中看到类似于primitive types的变量,比如: number值为 5, 或者 Boolean 值为true,这些都是引用了适当的包装类型。
  • automatic boxing and unboxing(自动装箱,拆箱)
  1. 或许automatic boxing and unboxing你在使用C#或者其他语言中碰到过。
  2. 转换primitive value 到包装类型实例i叫boxing
  3. 倒转过来从一个包装类型到primitive valueunboxing。
  4. Groovy完成这些操作都是自动的。
  5. 你已经知道,Groovy被设计成能和Java很好一起工作的语言。因此当Java方法取得primitive参数或者返回primitive发生了什么?我们该怎样从Groovy中调用那些方法?考虑已存在的方法java.lang.String class: int indexOf (int ch).在Groovy中你可以这样来使用:
    assert 'ABCDE'.indexOf(67) == 2
     以Groovy的观点来看,上面传递了包含67的Integer,虽然方法中希望的值类型为int.其实这也就是Groovy中的装箱和拆箱自动完成的效果
  6. 通过图,我们来更好的理解他们之间的自动装箱和拆箱机制:
  7. 同时附上Groovy类型图标:
  8. 因为上面图表的都是Object,你就可以使用它们的方法了,同时,Groovy也支持操作符重载,你既可以使用方法来让两个数相加,同时也可以使用”+“实现两数相加,这些都是允许的。当然还有更多运算符。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值