大数据之scala(二)变量和数据类型

本文详细介绍了Scala编程中的基本数据类型,包括变量、常量、字符串输出、键盘输入、数据类型转换等核心概念。讲解了Scala中变量与常量的声明方式、标识符命名规范、各种数值类型及其转换规则,以及如何进行类型转换和字符串操作。此外,还涉及到键盘输入的实现和一些重要的数据类型如Unit、Null和Nothing。内容深入浅出,适合初学者掌握Scala的基础知识。
摘要由CSDN通过智能技术生成

系列文章目录

大数据之scala学习(一) 案例操作



一、变量和常量

2.1注释

//单行注释
/*
多行注释
 */
/**
 * 文档注释  在idea中 敲 /**回车自动生成
 */

2.2常量和变量

-  java 中 
	变量类型 变量名称 = 初始值	int a = 10
	final 常量类型 常量名称 = 初始值     final int b = 20
 - scala中
	  	 var 变量名 [:变量类型] = 初始值     var i:Int = 10
	  	 val 常量名 [:常量类型] = 初始值    val j:Int = 10

注意: 能用常量的地方不用变量

  • 声明变量时 ,类型可以省略,编译器自动推导
  • scala是强类型语言,类型确定后就不能修改
  • 变量声明时,必须要有初始值
  • 可以用var/val修饰,但val修饰的变量不可更改
  • var 修饰的对象引用可以改变,val 修饰的对象则不可改变,但对象的状态(值) 却是可以改变的。(比如:自定义对象、数组、集合等等)

2.3标识符命名规范

  • 字母或者下划线开头,后接字母、数字、下划线 。
    如果时下划线开头后面必须跟内容
    如hello12
    Int(关键字可以,但不推荐)
    h_4(单独的下划线不可以)

  • 以操作符开头,且后面只能跟操作符(+ - * /#!等)
    如 /+ * #1不可以

  • 用 `` 包括任意字符串,可以是Scala关键字

2.4字符串输出

  • +号连接
  • printf用法,通过%传值
  • 字符串模板(插值字符串):通过$获取变量值
  • “”"实现多行字符串
  def main(args: Array[String]): Unit = {
    var name:String = "ytm"
    var age:Int =20
    var sal:Float= 1000.5f
    var salD:Double = 2000
    println("姓名 "+name+"薪资 :"+sal)
    ///这里是printf  不是println
    printf("姓名:%s  年龄:%d\n",name,age)
    //注意这里必须有s
    println(s"姓名: ${name} 薪资:${sal+2}")
    println(
      s"""
        |"姓名 "${name}
        |"年龄" ${age}
        |""".stripMargin)
  }

运行结果

2.5键盘输入

StdIn.readLine()、StdIn.readShort()、StdIn.readDouble()
案例 从控制台接受用户信息(姓名 年龄 薪资)

import scala.io.StdIn
object TestOperate {
  def main(args: Array[String]): Unit = {
    var name = StdIn.readLine()
    var age = StdIn.readShort()
    var sal = StdIn.readDouble()
    println(name + " " + age + " " + sal)
  }
}

2.6数据类型

  • Scala中一切数据均对象,Any是所有对象的父类
  • Scala数据类型分两类:AnyVal(数值类型)、AnyRef(引用类型)
  • 低精度的值类型向高精度值类型转换(自动转换,隐式转换)
  • Scala中StringOps是对Java中String增强
  • Unit :对应Java中的void, 用于方法返回值的位置,表示没有返回值。Unit是一个数据类型只有一个对象,就是(),Void不是数据类型,是一个关键字
  • Null是一个类型,只有一个对象-null.它是所有引用类型(AnyRef)的子类 Null可以赋值给任意引用类型(AnyRef),但不能赋值给 数值类型(AnyVal)
  • Nothing是所有数据类型的子类,主要用在一个函数没有明确返回值,可以返回任何的变量或者函数
    类继承图

2.7整数类型(Byte Short Int Long )

在这里插入图片描述
在这里插入图片描述

  • scala 各类型有固定范围和字段长度,不受具体操作的影响
  • Scala的整型,默认为Int,声明Long类型,需要加lL
  • Scala程序中变量声明为Int型,除非不足以表示大数,才使用Long(超出Int范围会编译报错)
    在这里插入图片描述

2.8浮点类型(Float Double)

在这里插入图片描述

  • Scala的浮点类型默认为Double型,声明为Float须加f或者F
    val n8 = 2.2345678912f //n7=2.2345679
    val n9 = 2.2345678912 //n8=2.2345678912

2.9字符类型(Char)

只能是单个字符,用 单引号括起来

2.10 布尔类型:Boolean

布尔类型也叫Boolean 类型,Booolean 类型数据只允许取值 true 和 false
boolean 类型占 1 个字节。

2.11 Unit 类型、Null 类型和Nothing 类型(重点)

在这里插入图片描述

2.12 类型转换

  • Unit类似Java中的void ,没有返回值。Unit 只有一个实例——( ),这个实例也没有实质意义
    def sayOk : Unit = {// unit 表示没有返回值,即 void
    }
    println(sayOk)
   输出: ()

-Null类只有一个实例对象,Null类似于Java中的null引用。Null可以赋值给任何引用类型(AnyRef),但不能赋值给数值类型(AnyVal)

  • Nothing,可以作为没有正常返回值的方法的返回类型
    def test(): Nothing = {
      throw  new Exception()
    }
    test()

2.12类型转换

Java中的

    public static void main(String[] args) {
        byte b = 127;
        test(b);
    }
    public static  void test(byte b) {
        System.out.println("bbbbb");
    }
    public static  void  test(short s) {
        System.out.println("sssss");
    }
    public static void test(char c){
        System.out.println("ccccc");
    }
    public static void test(int i){
        System.out.println("iiii");
    }
    输出:bbbbb

2.12.1 数值类型自动转换

Scala 程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数值类型(隐式转换)
数据类型按精度(容量)大小排序为:
Byte->Short->Int ->Long ->Float->Double
Char->Int
把精度大的数值类型赋值给精度小的数值类型时,就会报错
(byte,short)和 char 之间不会相互自动转换。
byte,short,char 他们三者可以计算,在计算时首先转换为 int 类型。
在这里插入图片描述

2.12.2 强制类型转换

精度大的数值类型转换为精度小的数值类型。使用时要加上强制转函数,但可能造成精度降低或溢出
强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级

//(1)将数据由高精度转换为低精度,就需要使用到强制转换  
    val num : Int = 2.7.toInt
    println(num)// 这个存在精度损失
//(2)强转符号只针对于最近的操作数有效,
//往往会使用小括号提升优先级
    var r1:Int = 10*3.5.toInt +  6*1.5.toInt
    var r2 = (10*3.5+6*1.5).toInt
    println("r1= "+r1+ " r2= "+r2)

2.12.3 数值类型和String 类型间转换

  • 基本类型转 String 类型(语法:将基本类型的值+“” 即可)
  • String 类型转基本数值类型(语法:s1.toInt、s1.toFloat、s1.toDouble、s1.toByte 、s1.toLong、s1.toShort)
    var str1:String = true + ""
    var str2:String = 4.5 + ""
    var str3 :String = 100 + ""
    var s1:String = "12"
    var n1 :Byte = s1.toByte
    var n2:Short = s1.toShort
    var n3:Int = s1.toInt
    var n4:Long = s1.toLong
    
    var n5:Int = "12.60".toInt

var n5:Int = "12.6".toInt 会出现NumberFormatException 异常。

扩展面试题

    var n:Int = 128
    var b:Byte = n.toByte
    println(b)//-128
    n = 130
    b = n.toByte
    println(b)//-126

1000 0000 为当前字节范围的最小值,约定为-128
负数补码:符号位不变,其它位取反+1
130:1000 0010 -> 1111 1101 -> 1111 1110 = -126

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值