Scala的变量和数据类型续篇

news2024/11/17 23:50:34

Scala的变量和数据类型续篇


文章目录

  • Scala的变量和数据类型续篇
    • 写在前面
    • 字符串
      • 字符串连接
      • 传值字符串
      • 插值字符串
      • 多行字符串
    • 输入输出
      • 输入
      • 输出
      • 网络
    • 数据类型
      • Java数据类型
      • Scala数据类型
    • 类型转换
      • 自动类型转化(隐式转换)
      • 强制类型转化
      • 字符串类型转化


写在前面

  • 操作系统:Windows10
  • JDK版本:jdk1.8
  • Maven版本:Maven-3.5.4
  • Scala版本:Scala-2.12.11
  • IDE工具:IntelliJ IDEA 2019.2.3

字符串

在 Scala 中,字符串的类型实际上就是 Java中的 String类,它本身是没有 String 类的。

在 Scala 中,String 是一个不可变的字符串对象,所以该对象不可被修改。这就意味着你如果修改字符串就会产生一个新的字符串对象

object ScalaString {
   def main(args: Array[String]): Unit = {
    val name : String = "whybigdata"
    val subname : String = name.substring(0,2)
  }
}

字符串连接

使用 + 符号即可拼接字符串

object ScalaString {
  def main(args: Array[String]): Unit = {
    // 字符串连接
    println("Hello " + name)
  }
}

传值字符串

%s表示字符串类型

object ScalaString {
  def main(args: Array[String]): Unit = {
    // 传值字符串(格式化字符串)
    printf("name=%s\n", name)
  }
}

插值字符串

${变量名}表示

object ScalaString {
  def main(args: Array[String]): Unit = {
    // 插值字符串
    // 将变量值插入到字符串
    println(s"name=${name}")
  }
}

多行字符串

连续三个"即(""")实现多行字符串的表示

object ScalaString {
    def main(args: Array[String]): Unit = {
        // 多行格式化字符串
        // 在封装JSON或SQL时比较常用
        // | 默认顶格符
        println(
                    s"""
                      | Hello
                      | ${name}
        """.stripMargin)
	 }
}

输入输出

输入

  • 从屏幕(控制台)中获取输入

调用scala.io.StdIn的readXXX()方法

object ScalaIn {
    def main(args: Array[String]): Unit = {
        // 标准化屏幕输入
        val age : Int = scala.io.StdIn.readInt()
        println(age)
	 }
}
  • 从文件中获取输入

scala.io.Source.fromFile()方法读取指定文件内容

object ScalaIn {
    def main(args: Array[String]): Unit = {
        scala.io.Source.fromFile("./input/user.json").foreach(
            line => {
                print(line)
            }
        )
        scala.io.Source.fromFile("input/user.json").getLines()
     }
}

输出

Scala进行文件写操作,用的都是 java中的I/O类

object ScalaOut {
    def main(args: Array[String]): Unit = {
      val writer = new PrintWriter(new File("./output/test.txt" ))
      writer.write("Hello Scala")
      writer.close()
	 }
}

网络

Scala进行网络数据交互时,采用的也依然是 java中的I/O类

object TestServer {
    def main(args: Array[String]): Unit = {
        val server = new ServerSocket(9999)
        while (true) {
            val socket: Socket = server.accept()
            val reader = new BufferedReader(
                new InputStreamReader(
                    socket.getInputStream,
                    "UTF-8"
                )
            )
            var s : String = ""
            var flg = true
            while (flg) {
                s = reader.readLine()
                if (s != null) {
                    println(s)
                } else {
                    flg = false
                }
            }
        }
    }
}

...

object TestClient {
    def main(args: Array[String]): Unit = {
        val client = new Socket("localhost", 9999)
        val out = new PrintWriter(
            new OutputStreamWriter(
                client.getOutputStream,
                "UTF-8"
            )
        )
        out.print("hello Scala")
        out.flush()
        out.close()
        client.close()
    }
}

引申问题:java的序列化是怎么回事?

  • java将内存中的对象存储到磁盘文件中,要求对象必须实现可序列化接口。

  • 在网络中想要传递对象,这个对象需要序列化。

数据类型

Scala与Java有着相同的数据类型,但是又有不一样的地方。请看下文:

Java数据类型

Java的数据类型包含基本类型和引用类型

  • 基本类型:byte,short,char,int,long,float,double,boolean

  • 引用类型:Object,数组,字符串,包装类,集合,POJO对象等

Scala数据类型

Scala是完全面向对象的语言,所以不存在基本数据类型的概念,有的只是任意值对象类型(AnyVal)和任意引用对象类型(AnyRef)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XWr4krqr-1676813839051)(1.png)]


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sTWxZYvq-1676813839052)(2.png)]

类型转换

自动类型转化(隐式转换)

请看以下代码

object ScalaDataType {
    def main(args: Array[String]): Unit = {
        val b : Byte = 10
        val s : Short = b
        val i : Int = s
        val lon : Long = i
	 }
}

强制类型转化

  • Java语言
int a = 10
byte b = (byte)a
  • Scala语言
var a : Int = 10
Var b : Byte = a.toByte

基本上Scala的AnyVal类型之间都提供了相应转换的方法。

字符串类型转化

scala是完全面向对象的语言,所有的类型都提供了toString方法,可以直接转换为字符串

lon.toString

任意类型都提供了和字符串进行拼接的方法

val i = 10
val s = "hello " + i

全文结束!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/730156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSM学习笔记-------Spring(二)

SSM学习笔记-------Spring(二) Spring_day021、IOC/DI配置管理第三方bean1.1 案例:数据源对象管理1.1.1 环境准备1.1.2 思路分析1.1.3 实现Druid管理步骤1:导入druid的依赖步骤2:配置第三方bean步骤3:从IOC容器中获取对应的bean对象步骤4:运行程序 1.1.4…

清华大学团队提出一种基于稳态视觉诱发反应的混合脑机接口

更多脑机接口前沿技术,关注公众号:脑机接口社区 近日,清华大学团队提出一种基于脑电图(EEG)和磁脑电图(MEG)混合的脑机接口(BCI)系统的研究,旨在提高BCI性能…

数字电路设计——加法器

数字电路设计——加法器 半加器 半加器只有两个一位宽的输入 a a a 和 b b b ,输出 a b ab ab 所产生的本位和 s u m sum sum 和进位 c o u t cout cout。组合逻辑为: S A ⊕ B , C o u t A B S A \oplus B,Cout AB SA⊕B,CoutAB 真值表和原…

选读SQL经典实例笔记02_多表查询

1. 除非有必要,否则不要用UNION代替UNION ALL 2. 查找两个表中相同的行 2.1. 当执行连接查询时,为了得到正确的结果,必须慎重考虑要把哪些列作为连接项 2.2. 当参与连接的行集里的某些列可能有共同值,而其他列有不同值的时候&a…

2.4.cuda驱动API-使用驱动API进行内存分配

目录 前言1. 内存分配总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记 本次课程学习精简 CUDA 教程-Driver API 内存分配 课程大纲可见下面…

基于Java生活缴费系统设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

【工具】录屏工具Bandicam参数测试(参数设置建议)

一款小而精美的软件,上手特别容易,学习版参见b站up视频:【免费】好用录屏软件推荐,无水印1080P你值得拥有。 我有个需求,要求录屏但视频文件尽可能小但保持基本清晰。 我分别用看视频环境(b站学习教程类&…

探索全桥电机驱动模块:实现精确控制与高效驱动

全桥电机驱动模块是一种在现代工程应用中广泛使用的电机驱动方式。对于需要精确控制和高效驱动的场景,如机器人、无人机、电动车等,全桥电机驱动模块提供了理想的解决方案。本文将介绍全桥电机驱动模块的原理和实际应用场景,并对几种常见的全…

【高并发网络通信架构】引入IO多路复用(select,poll,epoll)实现高并发tcp服务端

目录 一,往期文章 二,基本概念 IO多路复用 select 模型 poll 模型 epoll 模型 三,函数清单 1.select 方法 2.poll 方法 3.epoll_create 方法 4.epoll_ctl 方法 5.epoll_wait 方法 6.struct epoll_event 结构体 四,代…

uniapp踩坑之项目:uniapp修改弹窗组件样式

在components文件夹里创建zz-prompt文件夹&#xff0c;再在下面创建index.vue <!--通知弹窗index.vue--> <template><view class"prompt-box" v-if"visible" touchmove"true"><view class"prompt"><view c…

1.8 用户注册_和使用的工具类

步骤1&#xff1a;在common模块下,创建对应的工具类 /** 创建性别枚举(Sex)*/ /** md5加密类(MD5Utils)*/ /** 时间转换格式化类(DateUtil)*/ /** 生成全局唯一主机id (Sid)*/步骤2&#xff1a;在pojo模块下&#xff0c;创建表单封装bo对象 /** 注册表单bo对象 UserBO*/步骤3…

怎么将桌面笔记软件中记录的内容折叠起来或展开显示?

记笔记是一种良好的习惯&#xff0c;不仅可以帮助我们整理思绪&#xff0c;还能有效地记录重要的信息。在现代科技的支持下&#xff0c;一款优秀的笔记软件已经成为我们记录和管理事项的主要工具。特别是一款能够折叠的桌面笔记软件&#xff0c;将会给用户带来更多的便利和效率…

2023.07.07 homework

孩子们有些基础不好&#xff0c;鼓励为主&#xff0c;教他们慢慢搬公式推算&#xff0c;提高准确率就好啦。每一次比上一次好一点点&#xff0c;慢慢找回自信心。 图形结合&#xff0c;话说话&#xff0c;其实数学这玩意&#xff0c;画得好也比较直观 第八题找规律的题目&#…

【如何成功加载 HuggingFace 数据集】不使用Colab,以ChnSentiCorp数据集为例

【如何成功加载 HuggingFace 数据集】不使用Colab&#xff0c;以ChnSentiCorp数据集为例 前置加载数据集尝试一&#xff1a;标准加载数据库代码尝试二&#xff1a;科学上网尝试三&#xff1a;把 Huggingface 的数据库下载到本地尝试3.5 创建 state.json彩蛋 前置 Huggingface …

DAY45——动态规划part7

爬楼梯问题 爬楼梯阶数为1...m class Solution {public int climbStairs(int n) {int[] dp new int[n 1];int m 2;dp[0] 1;for (int i 1; i < n; i) { // 遍历背包for (int j 1; j < m; j) { //遍历物品if (i > j) dp[i] dp[i - j];}}return dp[n];} } class…

基于matlab处理来自立体相机图像数据构建室外环境地图并估计相机的轨迹(附源码)

一、前言 视觉同步定位和映射 &#xff08;vSLAM&#xff09; 是指计算摄像机相对于周围环境的位置和方向&#xff0c;同时映射环境的过程。该过程仅使用来自相机的视觉输入。vSLAM 的应用包括增强现实、机器人和自动驾驶。vSLAM 只需使用单眼摄像头即可执行。但是&#xff0c…

Spring系列3 -- 更简单的读取和存储对象

前言 上一篇章总结了,Spring的创建与使用,通过创建Maven项目配置Spring的环境依赖,创建Spring框架的项目,然后通过在Resource目录下创建Spring-config.xml配置文件,添加<bean></bean>标签将我们需要的bean对象注入到容器中,然后通过ApplicationContext获取Spring上…

Mybatis-puls——条件查询的三种格式+条件查询null判定+查询投影

前言 在mybatis_plus的封装中的Wrapper<T>接口参数就是用于封装查询条件 在测试类中启动如上一个简单的查询&#xff0c;然后控制台运行会输出一大堆无关日志&#xff0c;这里先把这些日志关闭 去除无关日志文件 先新建一个XML配置文件 然后变成如下&#xff0c;这里…

[神经网络]YoloV7

Yolo系列是一类很经典的目标检测网络&#xff0c;属于anchor-base型网络&#xff0c;即需要先产生先验框然后筛选先验框得到预测框。同时它也是One-Stage网络&#xff0c;即不需要额外的网络结构来筛选先验框。这两种特点使得它具备了运算速度快和计算精度相对较高的特点。 比较…

Win10怎么用U盘重装系统?Win10用U盘重装系统步骤图解教程

Win10怎么用U盘重装系统&#xff1f;使用U盘重装系统是一种快速而有效的方法&#xff0c;可以帮助我们在电脑中进行Win10系统的重新安装。首先用户需要准备一个容量适当的U盘&#xff0c;并确保其中没有重要数据&#xff0c;然后按照小编分享的Win10用U盘重装系统步骤图解教程操…