• Programming In Scala笔记-第五章、Scala中的变量类型和操作


      这一章的一些基础性的东西,主要包括Scala中的基本变量类型,以及相关的一些操作符。
      

    一、简单类型

      下表中列出Scala语言中的基本类型,以及其字节长度,其中Byte, Short, Int, Long以及Char都属于整型,整型再加上Float和Doble统称为数字类型。

    类型 描述
    Byte 8位有符号补码整型(-2^7~2^7 - 1)
    Short 16位有符号补码整型(-2^15~2^15 - 1)
    Int 32位有符号补码 整型(-2^31~2^31 - 1)
    Long 64位有符号补码 整型(-2^63~2^63 - 1)
    Char 16位无符号Unicode字符(0~2^16 - 1)
    String 由一系列Char组成
    Floar 32位双精度浮点型
    Double 64位双精度浮点型
    Boolean true或false

    二、操作和方法

      Scala中的+, -, *, /实质上都是方法的调用,前面提到过1 + 2实际上是(1).+(2)的简单形式,在这里Int型变量有一个名称为+的方法,这个方法接收一个Int型参数,返回值也为Int类型。Int型变量的+方法也可以接收一个Long型变量,返回结果为Long型。这里可以理解成有多个重载的+方法。

    val sum = 1 + 2
    val sumMore = (1).+(2)
    val longSum = 1 + 2L

      运算结果如下:
      这里写图片描述

      对于String类型的变量,可以直接调用其indexOf方法返回指定字符在字符串中出现第一次的下标位置。
      这里写图片描述
    同样的String也提供了另外一个重载的indexOf方法,这个方法可以接收两个参数,返回从指定位开始第一个指定字符的下标

    s indexOf('o', 5)

      这里写图片描述

      从这里可以看出,不管是+操作,还是indexOf操作,在Scala中本质是相同的,同样都是对某个对象的方法调用。

    三、对象的equal判断

      对Java熟悉的同学应该比较清楚==equals的区别。在Scala中判断两个对象是否相等可以直接使用==方法。
    1、字面量之间
      首先看一下对字面量使用==方法的结果,和Java中是一样的
      这里写图片描述

    2、对象之间
      再看一下两个对象之间直接使用==方法的结果,
      这里写图片描述

    3、不同类型对象之间
      ==方法也可用于不同类型的对象之间,并且可以与null进行比较
      这里写图片描述

      从上面这些操作可以看到,除了字面量的比较之外,Scala中==和Java中是不相同的。Java中,引用类型的==判断仅仅比较两个引用值是否指向内存堆中的同一个对象。而在Scala中对两个引用的==比较,和Java中的equals方法效果是相同的。同时,在Scala中提供了一个eq方法用于判断两个引用值是否指向同一个对象。neeq的功能相反。
      这里写图片描述

      Scala中调用==方法,程序执行时,首先判断左边的变量是否为null,如果不为null则调用其equals方法,判断右边变量是否相等。

    四、富封装
      Scala通过富封装为基本类型变量提供了更多的操作符,比如说对Int类型,有一个对应的富封装类为RichInt类型。基本变量的更多操作,以及基本变量的富封装类对应关系分别列举在下面的两个表格中。
    富封装提供的操作表:

    操作 结果
    0 max 5 5
    0 min 5 0
    -2.7 abs 2.7
    -2.7 round -3L
    1.5 isInfinity false
    (1.0 / 0) isInfinity true
    4 to 6 4, 5, 6
    “bob” capitalize “Bob”
    “robert” drop 2 “bert”

    富封装类对应关系表:

    基本类型 富封装类型
    Byte scala.runtime.RichByte
    Short scala.runtime.RichShort
    Int scala.runtime.RichInt
    Char scala.runtime.RichChar
    Float scala.runtime.RichFloat
    Double scala.runtime.RichDouble
    Boolean scala.runtime.RichBoolean
    String scala.collection.immutable.StringOps
  • 相关阅读:
    Centos7端口查看相关
    Redis线程安全问题
    利用redis 分布式锁 解决集群环境下多次定时任务执行
    分布式锁的几种实现方式~
    什么是 CI/CD? (持续集成/持续交付)
    Java JDBC 中获取 ResultSet 的大小
    BeetleX之XRPC使用详解
    事件驱动框架EventNext之线程容器
    BeetleX之快速构建Web多房间聊天室
    BeetleX之TCP服务应用详解
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300225.html
Copyright © 2020-2023  润新知