01_Scala基础_变量类型_运算符
源文件以 ".scala" 为扩展名 ; 程序的执行入口是main()函数, 严格区分大小写
方法由一条条语句构成,语句后不需要分号;  一行有多条语句,除了最后一条语句不需要分号,其它语句需要分号
\t      :一个制表位,实现对齐的功能
\n     :换行符
\\      :一个\
\"      :一个"
\r      :一个回车  println("hello\rk"); 
Scala语言输出的三种方式
1 字符串通过+号连接(类似java)
2 printf用法 (类似C语言)字符串通过 % 传值。
3 字符串通过$引用(类似PHP)
Scala中的注释类型
单行注释    //注释文字
多行注释 /*  注释文字 */
文档注释   被工具 scaladoc 所解析,生成一套以网页文件形式体现的该程序的说明文档
变量 var | val 变量名 [: 变量类型] = 变量值
类型可以省略(类型推导)
类型确定后,就不能修改 (强数据类型)
var 修饰的变量可改变; 修饰的对象引用可以改变,  val 可改  编译后等同于加上final
/**
 * @deprecated xxx
 * @example testing coding
 */
object PrintVarTest {
  def main(args: Array[String]): Unit = {
    var name: String = "hello"
    var age: Int = 35
    // printf用法
    //字符串通过 % 传值
    //字符串通过$引用
    //1 printf + % 格式化输出
    printf("名字: %s , 年龄: %d \n", name,age)
    println("名字:" +name)
    // 2 println () $变量   输出
    println(s"名字: $name , 年龄: $age")
    // 变量 var | val 变量名 [: 变量类型] = 变量值
    //1 类型可以省略(类型推导)
    //2 类型确定后,就不能修改 (强数据类型)
    //3 var 修饰的变量可改变 val 修饰的变量不可改  编译后等同于加上final
    //4 var 修饰的对象引用可以改变
    //5 变量声明时,需要初始值
    // 编译器,动态的 (逃逸分析): 当数据生命周期很长,经常引用,会放在堆里(heap) ,如果偶尔用一下会放在栈里面(stack) 对象也可能在stack里面
    var age_var: Int = 10
    var age_var_updated = 10 //1 类型可以省略(类型推导)
    var score:Float = 70.9f // 在scala中,小数默认为Double ,整数默认为Int
    // age_var = "alex"  2 类型确定后,就不能修改 (强数据类型)
    
    val lx2 = new jiefu  //因为val 没有线程安全问题,因此效率高
    var lx = new jiefu  //4 var 修饰的对象引用可以改变
    // 3 var 修饰的变量可改变  val 修饰的变量不可改  编译后等同于加上final
    lx.age = 30
//    lx.name = "bob"  报错 val  final 不可变
  }
}
class jiefu{
  var age: Int = 29
  val name: String = "Robin"
//  var high : Double = 0  // 5 必须有初始值 不然就是抽象的
}
数据类型介绍
1 Scala中根类型是 Any ,所有类的父类
2 AnyVal(值类型) 和 AnyRef(引用类型) 不管是AnyVal还是AnyRef 都是对象,都是any的子类
3 Null 类型是特殊类型,只有一个值null, 是bottom class, 是所有Anyref类型的子类
4 Nothing  也是bottom class, 所有类的子类, 将Nothing类型的值 返回给任意变量或函数,多用于异常

数据类型列表
| 数据类型 | 描述 | 
| Byte [1] | 8位有符号补码整数。数值区间为 -128 到 127 | 
| Short [2] | 16位有符号补码整数。数值区间为 -32768 到 32767 | 
| Int [4] | 32位有符号补码整数。数值区间为 -2147483648 到 2147483647 | 
| Long [8] | 64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807 | 
| Float [4] | 32 位, IEEE 754标准的单精度浮点数; 两种表示法:1 十进制: 10.11f, 2 科学计数法: 5.2e-2 => 5.2*10的负的二次方 | 
| Double [8] | 64 位 IEEE 754标准的双精度浮点数; 更精确 小数点后大致7位 | 
| Char [2] | 16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF | 
| String | 字符序列 | 
| Boolean | true或false | 
| Unit | 表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。 | 
| Null | null | 
| Nothing | Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。 | 
| Any | Any是所有其他类的超类 | 
| AnyRef | AnyRef类是Scala里所有引用类(reference class)的基类 | 
数据类型介绍
1 Scala中根类型是 Any ,所有类的父类
2 AnyVal(值类型) 和 AnyRef(引用类型) 不管是AnyVal还是AnyRef 都是对象,都是any的子类
3 Null 类型是特殊类型,只有一个值null, 是bottom class, 是所有Anyref类型的子类
4 Nothing  也是bottom class, 所有类的子类, 将Nothing类型的值 返回给任意变量或函数,多用于异常
Booolean类型数据只允许取值true和false
null 可以赋值给任意引用类型(AnyRef),
null 不能赋值给值类型(AnyVal: 比如 Int, Float, Char, Boolean, Long, Double, Byte, Short)
object DataTypeTest {
  def main(args: Array[String]): Unit = {
    sayHi()
    sayHi _ ; println("xxx")  // sayHi _ 不执行
    sayHi  // 无形参 可以省略
    // char
    //当我们输出一个char类型时,他会输出该数字对应的字符(码值表 unicode)//unicode 码值表包括ascii
    var c1 : Char = 'a'
    var c2 : Char = 97
    printf(s"c1: $c1,  c2: $c2\n")   //c1: a,  c2: a
    //char 可以当做数字进行运行
    var char2: Char = 'a'
    var num = 10 + char2
    println("num=" + num + " =>" +  num.getClass) // num=107 =>int
    //1. 当把一个计算的结果赋值一个变量,则编译器会进行类型转换及判断(即会看范围+类型)
    //2. 当把一个字面量赋值一个变量,则编译器会进行范围的判定
//        var cc2: Char = 'a' + 1 //报错 require char found int
//        var cc3: Char = 97 + 1 // 报错 require char found int
        var cc4: Char = 98
  // Null & Nothing
  //Null类只有一个实例对象,null,类似于Java中的null引用。null可以赋值给任意引用类型(AnyRef),
  //不能赋值给值类型(AnyVal: 比如 Int, Float, Char, Boolean, Long, Double, Byte, Short)
    var d1 : Dog = null
//    var d2 : Double = null // 报错 an expression of type Null is ineligible for implicit conversion
    
  }
  def sayHi(): Unit = {
    println("hello")
  }
  //比如开发中,我们有一个方法,就会异常中断,这时就可以返回Nothing
  //即当我们Nothing做返回值,就是明确说明该方法没有没有正常返回值
  def sayException: Nothing = {
    throw  new Exception("Nothing 类型 抛出异常")
  }
}
class Dog {
}1 自动类型提升 程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换(隐式转换)。
2 强转: 自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转函数,但可能造成精度降低或溢出
java  :  int num = (int)2.5
scala :  var num : Int =  2.7.toInt  //对象
1 当进行数据的 从 大——>小,就需要使用到强制转换
2 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
3 Char类型可以保存 Int的常量值,但不能保存Int的变量值,需要强转
4 Byte和Short类型在进行运算时,当做Int类型处理
object DataTransAtest {
  def main(args: Array[String]): Unit = {
    var c1 : Char = 'a'
    var c2 : Int  = c1
    println("c1: " +  c1.getClass) // c1: char
    println("c2: " +  c2) // c2: 97   低精度向高精度转换  char -> int
    var i1 :Byte = 20
//    var c3: Char = i1  //type mismatch Byte 不能与 char 互转
    //1 自动类型提升:有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
    var n1 = 10
    var n2 = 1.1f
    var n3 = n1 + n2
    println(n3.getClass)  //float
    // 2 强转:自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转函数,但可能造成精度降低或溢出
    val d1 = 1.2
    val s1 = d1 + "" // + 拼接 返回字符串
    //String类型转基本数据类型 精度损失
    val s2 = "12"
    val num1 = s2.toByte; val num2 = s2.toShort
    val num12 = num1 + num2 // 返回int  类型
    val num3 = s2.toDouble ;  val num4 = s2.toLong
    var num5 = num3 + num4  //返回double类型
    //在scala中,不是讲小数点后的数据进行截取,而是会抛出异常
    val s4 = "12.5"
    println(s4.toInt) // error
    println(s4.toDouble) //  ok
  }
}
运算符  特殊的符号,用以表示数据的运算、赋值和比较等。
算术运算符 (arithmetic)是对数值类型的变量进行运算
比较运算符(关系运算符) 结果都是Boolean型,也就是要么是true,要么是false
逻辑运算符 用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个Boolean值 
赋值运算符  就是将某个运算后的值,赋给指定的变量
位运算符
| 算术运算符 | 运算 | 范例/结果 | 备注 | 
| + | 正号 | +3 => 3 | |
| - | 负号 | -5 => -5 | |
| + - | 加 减 | num1 += 1替代 ++ ;num1 -= 1替代 num1-- | |
| * / | 乘除 | 10/3 => 3 | 整数之间做除法时,只保留整数部分而舍弃小数部分 | 
| % | 取模(取余) | 7 % 5 => 2 | a % b = a - a/b * b println(-10 % -3 ) // -1 // -10 % -3 = (-10)- (3) * -3 = -10 + 9 = -1 | 
| + | 字符串拼接 | ||
| 关系(比较)运算符 | 相等于 | 1==2 false | |
| == | 相等于 | ||
| != < > | 不等于 | ||
| <= >= | 小等/大等 | ||
| 逻辑运算符 | |||
| && | 逻辑与 | var a = true | (a && b)) false | 
| || | 逻辑或 | var b = false | (a || b ) true | 
| ! | 逻辑非 | !(a && b) true | |
| 赋值运算符 | |||
| = | 赋值 | ||
| += | 相加后再赋值 | ||
| -= | 相减后再赋值 | C -= A 等于 C = C - A | |
| *= /= %= | 相乘/除/余 再赋值 | C /= A 等于 C = C / A; C %= A 等于 C = C % A | 
- 点赞
- 收藏
- 关注作者
 
             
           
评论(0)