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
)
类型转换
自动类型转化(隐式转换)
请看以下代码
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
全文结束!