Scala变量

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhoushuilin/article/details/80912302
/**
  * Created by ZHOUSHUILIN140 on 2018/6/14.
  */
object Variable {
  /**
    * 学习如何定义变量, 如何定义常量
    * @param args
    */

  def main(args: Array[String]): Unit = {
      // var 变量名称:数据类型=初始化值
    var a:Int=2147483647 //4个字节, 一个字节是8位, 也就是说Int的最大值不能超过231次方 -1
    //231次方=2147483648

    //var b:Long=2147483648  , 这个感觉挺出乎我们的意料的,我们不是说Long8个字节吗,那8个字节
    //应该会占有64位,也就是263次方-1,那为什么还报错呢 , 这里其实隐藏了一个知识,我们讲过了,
    //数值类型的默认值是int , 那你这个值其实已经超过了Int的范围了,那肯定编译的过程中就会报错,
    //这样做容易损失精度,那你定义为Long类型该怎么办呢? 我们可以在后面加一个L来表示,其实加l也可以,
    //但是l容易引起不必要的错误,
    var b:Long=2147483647
    //那同理, 我们在用小数点的类型的时候,也就是浮点类型的时候,因为默认的值为Double类型,如果从
    //double转到Float的时候,可能会损失精度,所以我们一般加上F或者f, 一般都统一用大写F
    var aa:Float=12.345F

    var c:Byte=10
    var d:Int=2147483647

    println(c)
    //var e:Byte = c + d 这样做是不对的,因为你Int转换到Byte的时候,容易损失精度,你Int能容纳下的数据范围肯定比Byte大,
    //加上以Byte之后,很有可能就超过了Byte的范围,所有这个时候,默认不能转换, 那这种问题是否能够解决呢,可以,只要你确定
    //你用Byte能够存放的下,那么我们可以强制性把Int转换为Byte ,大家思考一个问题,那如果说
    //d的值为2147483647的时候,你强制性转换为Byte,这个时候已经超过了Byte的范围了,那这个时候会出现什么情况呢, 那肯定会出现
    //错误的结果
    //注意:
    //不要随意的去使用强制转换,因为它隐含了精度损失问题。
    var e:Byte = (c + d).asInstanceOf[Byte]
    //var e:Int=c +d
    //println(b)
    println(e)

    //默认转换(从小到大的转换)
    //A:byte,short,char—int—long—float—double
    //B:byte,short,char相互之间不转换,他们参与运算首先转换为int类型


    /**
      * 好,那我问大家一个问题,
      var a:Byte=1
      var b:Byte=2
      var c:Byte=4
      那我想问一下, c = a + b会不会报错
      var d:Int=5
      那我再想问一下,d = a + b是不是会报错
      */


    var f:Byte=1
    var g:Byte=2
    var h:Byte=4


    //h = f + g  是否会编译失败? 如果编译失败,原因是什么?
    var i:Int=5
    i = i + 1
    println(i)
    //i = f + g 是否会编译失败? 如果编译失败,原因是什么?

    //h = (f + g).asInstanceOf[Byte] 呢?


    /**
      * h = f + g会编译报错, i = f + g编译不会报错,我们前面讲了,byte,short,char相互之间不转换,他们参与运算首先转换为int类型
      也就是说,fg在做运算的过程中,都会自动的转换为Int类型,那Int类型的话,数据范围比Byte大,不能自动转换为Byte Int类型再赋值给
      Byte类型,可能会有损精度,会导致编译报错。
      */
  }

}

猜你喜欢

转载自blog.csdn.net/zhoushuilin/article/details/80912302