• 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 Coderesults.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也支持操作符重载,你既可以使用方法来让两个数相加,同时也可以使用”+“实现两数相加,这些都是允许的。当然还有更多运算符。

Groovy(Java笨狗)系列--datatypes相关推荐

  1. Groovy(Java笨狗)系列---断言

    假如你使用过JDK1.4或者更高版本,你一定熟悉assertions(断言)..通常,他会在你的代码中测试你的逻辑是否矛盾和正确. 接下来我们通过实例来学习Groovy中的断言,在学习之前,请务必记住 ...

  2. Groovy(Java笨狗)系列--Class,Scripts

    Class是OOP编程的基础. 现在我们开始Class. 下面我们定义一个简单的Groovy类: class Book { private String title Book (String theT ...

  3. Groovy(Java笨狗)系列--fields and local variables

    使用最简单的术语,a variable(变量): 变量名引用的值关联着物理内存的某个位置.和Java一样,Groovy拥有 local variables(本地变量),fields(字段):local ...

  4. Groovy(Java笨狗)系列-Working with closures(1)

    翻译自<Groovy in action>,如有不准确之处,希望指教! closures(闭包)很重要,非常的 重要!!!可以被认为是Groovy中一个非常有用的特性.同时,在你没有完全了 ...

  5. Groovy(Java笨狗)系列---Getting Started(三)

    (一).Setting up your Java environment(设置你的Java环境). Groovy需要Java,建议JDK1.4或者以上.假如你还没有安装Java,请按照下面的步骤来安装 ...

  6. Groovy on Grails(Java笨狗)系列---前言(二)

    本系列的教材是由本人对官方文档的翻译,也算一个对学习的总结,对于原文档的所有权归原作者,译文为共享资源,但不能用于商业目的. 因为groovy,grails的语法发生了很多变化,可能现在互联网上的资料 ...

  7. Groovy on Grails(Java笨狗)系列---开篇(一)

    Groovy 和Grails就不用介绍了 这两个系列主要是写给喜欢Groovy和Grails的朋友们 个人感觉 Groovy on Grails会在以后使我们对现在编程思想的改变,起码对于我自己来说是 ...

  8. Java笨狗groovy学习笔记—Regular Expressions

    正則表達式就像一把瑞士軍刀. "potatoe" ==~ /potatoe/ 假如你在groovyConsole運行它,將返回true.這裡有兩件需要注意的事情: 1.==~操作符 ...

  9. Grails(Java笨狗)系列-更好的理解闭包(closure)

    用现实生活中的示例来说明闭包 现在,让我们来考虑放在信封里的信纸.信纸里可能写着"x=5, y=10"等等一些内容.对于一个闭包(closure),信纸上可能写着一系列的指令.你可 ...

最新文章

  1. 关于代理服务器藏IP的一些问题(高手免看)
  2. 镜像的分层结构 - 每天5分钟玩转容器技术(11)
  3. 【流媒体服务器的搭建】1. 源码编译安装x264
  4. leetcode 169. 多数元素(不同数相消解法)
  5. 代码逆流成河,深入C++如何又快又有效?
  6. Vue + Spring Boot 项目实战(五):数据库的引入
  7. java 给对象创建实例_Java中创建(实例化)对象的五种方式
  8. webkit事件处理
  9. 用于Elasticsearch数据可视化和分析的强大工具
  10. 完整部署CentOS7.2+OpenStack+kvm 云平台环境(3)--为虚拟机指定固定ip
  11. 《编码-隐匿在计算机软硬背后的语言》第七章我们的十个数字
  12. 大道至简-第一张 伪代码
  13. 计算机的操作系统的那个好,电脑操作系统哪个最好用?
  14. 三菱伺服驱动器说明书_干货——PLC控制伺服系统(伺服电机)
  15. Macbook查看隐藏文件
  16. POSCMS LOGO替换
  17. 网友自曝取公积金血泪史 给你点希望又让你绝望
  18. 9个经典营销创业案例,彻底颠覆你的营销思维
  19. stm32读取目标芯片_PCF8563时钟读取芯片程序 STM32
  20. 用计算机控制单片机的程序编写,单片机程序编写步骤

热门文章

  1. 前端接入facebook jsSDK,实现登录授权功能
  2. android qq接口,手机QQ Scheme接口
  3. Bag标签之轻开B2C电子商务网站登录校验实例
  4. google adwords无法下载怎么办?
  5. 微型linux系统测试网卡,自制一个小型Linux(附带网络功能)
  6. 20190121——不慕神仙?不羡神仙! java中的单例模式
  7. 上海职称不用考计算机和英语翻译,国家翻译专业资格考试将替代职称评定
  8. 介绍计算机说明文,介绍电脑的说明文作文300字
  9. Calendars and DateFormats should not be static
  10. 微信服务号开发-获取用户位置信息