- 思考:
- long和double类型取值范围最大,为什么不直接使用这两个类型去声明所有的变量值呢?
- 类型的取值范围时如何计算的呢?
在Java中有八种基本类型
- 4种整数类型
- 2种浮点类型
- 1种用于表示Unicode编码的字符单元的字符类型char
- 1种表示真值的Boolean类型
- 整数类型(int , short , long , byte)
类型 存储需求 取值范围 int 4字节 -2 147 483 648 ~ 2 147 483 647(正好过20亿) short 2字节 -32 768 ~ 32767 long 8字节 -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 byte 1字节 -128 ~ 127 一般,我们经常使用int类型。但是如果需要表示一个地球上的人数那么就需要使用long类型。
byte,short类型主要用于特定的应用场合,例如,底层的文件处理或者需要控制占用储存空间量的大数组。众所周知
Java 不像 c/c++ 语言 , Java中int类型的取值范围,不会因机器的不同而发生改变,其取值范围是固定的,这就解决了软件从一个平台移植到另一个平台,或者在同一平台中不同操作系统之间进行移植给程序猿带来的诸多问题。没有学过 c/c++ 语言,获取看不懂这句话,在c/c++程序需要针对不同的处理器选择最为高效的整形,这样就有可能造成一个在32位处理器上运行很好的c/c++的程序在16位系统上运行却发生整数溢出。
在使用long类型时,数值需要在后面需要跟一个后缀 L 或者 l(小写L),建议使用 L ,因为 l 跟 1 很像,不方便别人阅读代码。
long num = 17L; //后面需要带上L //切无使用 小写 l , 不方便别人阅读代码 //long num = 17l;16进制数值前面需要有一个前缀0x或者0X,表示16进制数字
int num = 0x10; //表示16进制数字 108进制有一个前缀0
int num = 012; //0开头表示八进制数字 12从Java7开始,前缀加上0b或者0B表示2进制数字。
int num = 0b1001; //0b开头二进制数字 1001 int num2 = 0B1001; //0B开头也表示二进制数字从Java7开始,数字之间可以加上 “_” 以方便读者阅读。Java编译器在编译时,会自动将其去除。
long num = 123_2342_2358; //方便阅读因为,节省内存。比如 使用 double类型变量a,那么在内存中就会开辟出double类型取值范围的空间,如果变量a并没有使用这么多空间,那么剩余的空间都会浪费了。
- 浮点类型(float,double)
类型 存储需求 取值范围 float 4字节 大约 ±3.402 823 47E+38F(有效位数6~7位) double 8字节 大约 ±1.797 693 134 862 315 70E+308(有效位数为15位) double表示这种类型的数值精度时float类型的两倍(有人称为之双精度数值)。绝大部分应用程序都采用double类型。在很多情况下,float类型的精度很难满足需求。
float类型的数值有一个后缀 f 或 F 。没有后缀 F/f 的浮点类型数值,默认是double类型。也可以在浮点数值后面增添后缀D或d表示double类型。
float i = 3.14F; //float类型 double i2 = 3.14; //double类型 double i3 = 3.14F; //3.14F是float类型,但是double指定变量类型。后面会学到,类型转换 float i4 = 3.14; //3.14没有后缀名,默认double类型,float指定变量类型。后面学习,类型转换需要注意的是,浮点数值不适用于无法接收舍入误差的金融计算中…
public class test {
public static void main(String[] args) {
System.out.println(3.0-2.1); //结果为 0.8999999999999999 , 而并非 0.1
}
}
原因:浮点数值采用二进制系统表示,而在二进制系统中 无法精确的表示分数 1/10 . 这就如十进制中的1/3一样.如果在数值计算中不允许有任何舍入误差,就应该使用BigDecimal类,后面会讲.
- char类型
- char类型原本用于表示单个字符.不过,现在情况已经有所变化.有一些Unicode可以用 1 ~ 2个char表示.
- 在java中,需要用两个单引号括起来,表示char类型的值.需要注意的是,使用 ’ ’ 和 使用 " " 表示的含义不同.
例如 以下为char类型的定义 :
char c = 'a'; //需要注意的是 'a' 和 "a" 不同.
- char还可以使用16进制表示. 使用 uXXXX 表示16进制的字符. 那么你可能有疑问了, 16进制数字不是使用 0x 开头吗?
- 对整形而言 确实是使用 0x 开头表示16进制数字
- 但是对于char来说 , 是 u 开头.范围: u0000 ~ Uffff
- 在Unicode中: u005b 表示 [ 符号 , u005d 表示 ] 符号. 那么在代码中,如下写法也是完全符合语法:(在部分编译器中,会报语法错误 , 但是并不代表这种写法不可以)
public class A{ //在一下代码中,我们使用 Unicode 来表示[]两个括号 public static void main(Stringu005bu005d args){ System.out.println("你好世界"); } }程序示例: (因为IDEA编译器不支持这种写法,所以来到记事本这里)
运行结果:
- char可以转换为ASCLL码,也可以与int类型相互转换和判断.
public class A{ public static void main(String[] args){ int num = 'a'; //变量num类型为int , 其值为 'a' System.out.println(num); //打印 num 变量 } }
以下为输出结果
- u 其实是一个转义序列.什么是转义序列呢? 我们以java代码来演示
现在有一个需求,使用System.out.println(); 代码 , 打印一个char类型变量,打印结果为一个单引号.
public class A{ public static void main(String[] args) { // char c = '''; //这种写法是不被允许的.因为 ' 引号是java中的一个符号 char c = '''; //' 则表示 符号 ' System.out.println(c); //打印即可 } }可以看到 ’ 符号就被打印出来了.
- 转义字符不止这一个,也不止以下这些.
转义序列 作用 Unicode b 退格 u0008 t 制表符 u0009 n 换行 u000a r 回车 u000d " 双引号 u0022 ’ 单引号 u0027 \ 反斜杠 u005c - 在注释中使用Unicode码的时候 需要注意
public class A{ public static void main(String[] args) { // c:uusrlocal System.out.print("niahonihaion"); } }以上程序也会报错,报错信息:非法的Unicode转义
因为在注释中 java 把注释中的u当成了 Unicode 字符. u后面没有跟着4个16进制数字,所以报错.
其实也没有很好的解决方案 , 可以在 和 u 中间打上一个空格,更多的是避免这种写法. -
我们建议不要在程序中使用char类型,最好将字符串作为抽象数据类型处理.(后续会讨论)
- boolean(布尔)类型
- Boolean类型有两个值:true和false
- Boolean值和整形中的值不能相互转换 但是在c++中,数值至指针可以代替Boolean的值. 1 表示 true , 2 表示 false.
然而在java中却不可以. - 语法
public class A{ public static void main(String[] args){ boolean b = true; //定义boolean类型变量b,值为true boolean bb = false; //定义boolean类型变量bb,值为false } }
- String类型 (课补,不属于8大基本类型) 这里简述String类型,后面会更详细的进行解释.
- 语法:
public class A{ public static void main(String[] args){ Stirng msg = "大家好 , 我是字符串"; //定义字符串类型时,其值需要使用双引号包括起来 System.out.println(msg); } }与char不同的是 , char只能表示一个字符 , 而String可以表示多个字符,又被又称 “字符串”
- 字符串的拼接
字符串和字符串之间可以使用 + 号进行拼接.
public class A{ public static void main(String[] args){ String msg = "你好"; String msg2 = ","; String msg3 = "世界"; System.out.println(msg+msg2+msg3); //打印拼接后的内容. } }打印结果:
- 在String中使用 转义符
public class A { public static void main(String[] args) { System.out.println("使用换行符:"+"你好n世界"); //使用换行符 System.out.println("-----------------------"); System.out.println("使用制表符:"+"你好t世界"); //使用制表符 System.out.println("-----------------------"); System.out.println("使用退格符:"+"你好b世界"); //使用退格符 System.out.println("-----------------------"); System.out.println("使用回车:"+"你好r世界"); //使用回车 System.out.println("-----------------------"); System.out.println("使用Unicode码:"+"u005b你好世界u005d"); //使用Unicode码 } }输出结果:



