第2章 变量和数据类型
-
变量和常量
1.1 java中变量和常量的定义
1.2 scala中变量和常量的定义
scala中不仅是面向对象的语言,还是一种函数式编程语言,里面没有变量的概念,所以能用常量的地方不用变量。
// 常量 val a: Int = 10 // 变量 var b: Int = 20
-
测试变量
变量声明时,必须有初始值
-
标识符
-
字符串
-
读写文件
package chapter02 import java.io.{File, PrintWriter} import scala.io.{BufferedSource, Source} object Test06_FileIO { def main(args: Array[String]): Unit = { // 1. 从文件中读取 val source: BufferedSource = Source.fromFile("src/data/test.txt") // 涉及函数式编程 source.foreach(print) // 2. 将数据写入文件,直接调用java类 val writer = new PrintWriter(new File("src/data/output.txt")) writer.write("hello scc") writer.close() } }
-
数据类型
-
整型和浮点类型
分别占1,2,4,8字节
-
字符类型Char
-
空类型
空值类型,空引用类型,什么都没有类型
-
java类型转换复习
/** * 1. byte自动类型转换,从低精度类型自动转换为高精度类型,byte->short->int类型转换, * 注意byte不能转换为char(字符),char占据两个字节,但是是字符类型 * 2. char类型自动转换为char->int */ public class TestDataTypeConversion { public static void main(String[] args) { byte b = 10; test(b); char c = 'c'; test(c); } public static void test(byte b) { System.out.println("bbbbbbbbbbb"); } public static void test(short s) { System.out.println("ssssssssss"); } public static void test(char c) { System.out.println("cccccccccccccc"); } public static void test(int i) { System.out.println("iiiiiiiiiiii"); } }
-
scala自动类型转换
package chapter02 object Test08_DataTypeConversion { def main(args: Array[String]): Unit = { val b: Byte = 10 val l: Long = 22222L val c: Long = b + l val c1: Int = (b + l).toInt // 强制类型转换 val a3: Byte = 10 //val b3:Char = a3 error //val c3:Byte = b3 error val a4: Char = '1' val b4: Byte = 10 val c4: Short = 10 val d4: Int = a4 + b4 + c4 println(d4) } }
-
强制类型转换
-
数值类型和字符串类型转换
//数值类型和string类型转换 //1.数值转string val n2 = 27 val s2 = n2 + "" //2.string转数值 val f: Float = "12.3".toFloat val n3 = "27.3".toDouble.toInt // 符合当前数据类型规则做转换,直接"27.3".toInt会报错 println(n3)
-
强制转换导致数据溢出问题
/** * 强转导致数据溢出 * 128 Int类型,占据四个字节,32位 * 原码:0000 0000 0000 0000 0000 0000 1000 0000 * 由于是正数,原码等于补码 * 补码:0000 0000 0000 0000 0000 0000 1000 0000 * 截取最后一个字节 * 得到补码1000 0000 * 表示最大负数-128 */ /** * 强转导致数据溢出 * 130 Int类型,占据四个字节,32位 * 原码:0000 0000 0000 0000 0000 0000 1000 0010 * 由于是正数,原码等于补码 * 补码:0000 0000 0000 0000 0000 0000 1000 0010 * 截取最后一个字节 * 得到补码1000 0010 * 对应原码,符号位不变,取反+1,得到11111110 * 表示最-126 */ val n5 = 130 val b5: Byte = n5.toByte println(b5) // -126