基本概念
变量相当于内存中一个数据储存空间的表示
注意事项
- 变量表示内存中的一个储存区域(不同的变量,类型不同,占用的空间大小不同,比如:int四个字节,double就是八个字节)
- 该区域有自己的名称和类型
- 变量必须先声明,后使用
- 该区域的数据/值可以在同一类型范围内不断变化
- 变量在同一个作用域内不能重名
- 变量 = 变量名 + 值 + 数据类型
+号的使用
- 当左右两边都为数值型时,则作加法运算
- 当左右两边有一方为字符串,则作拼接运算
- 运算顺序从左到右
- “hello” + 100 + 3 = hello1003
- 100 + 3 + “hello” = 103hello
数据类型
- 基本数据类型
- 数值型
- 整数类型,存放整数(byte[1],short[2],int[4],long[8])
- 浮点(小数)类型(float[4],double[8])
- 字符型(char[2]),存放单个字符’a’
- 布尔型(boolean[1])
- 数值型
- 引用数据类型
- 类
- 接口
- 数组([])
整数类型
类型 | 占用储存空间 | 范围 |
---|---|---|
byte | 1字节 | -128~127 |
short(短整型) | 2字节 | -(215)~215-1 |
int | 4字节 | -(231)~231-1 |
long | 8字节 | -(263)~263-1 |
- 整型细节
- java的整型常量默认为Int型,声明long型常量后需要加’l’或’L’
- bit:计算机中的最小储存单位。byte:计算机中基本存储单元 1byte = 8 bit.
浮点类型
- 浮点型的分类
类型 | 占用储存空间 | 范围 |
---|---|---|
单精度(float) | 4字节 | -3.403E38 ~ 3.403E38 |
双精度(double) | 8字节 | -1.798E308 ~ 1.798E308 |
- 说明
-
关于浮点数在机器中存放形式,浮点数=符号位 +指数位+尾数位
-
尾数部分可能丢失,造成精度损失(小数都是近似值)
-
java的浮点型常量默认为double型,声明float时后面要带’f’或者’F’
float num1 = 1.1F
double num2 = 1.1f
以上两者都是正确的
-
浮点型常有两种表示形式
- 十进制数形式: .512 5.12 512.0f
- 科学计数法形式
-
通常情况下,应该使用double型,因为他比float更精确
-
当我们对运算结果是小数的进行相等判断时,应该是以两个数的差值的绝对值,在某个精度范围内判断
字符类型
-
基本介绍
- 字符类型可以表示单个字符,字符类型是char,char是两个字节
char c1 = 'a' // a char c2 = '\t' char c3 = '张' //张 char c4 = 97 // a
- 当输出数字时,会输出该数字表示的字符
-
字符细节
- 字符常量是用单引号括起来的单个字符
- java中允许转义符’'来将其后的字符转变为特殊字符常量
- 在java中,char的本质是一个整数,在输出时,时unicode码对应的字符
- 可以直接给char赋予一个整数,在输出时,会按照对应的unicode字符输出
- char类型是可以进行运算的,相当于一个整数,因为他们都有对应的unicode码 (‘a’+10 =107)
char c5 = 'b' + 1;
System.out.println((int)c5); //99
System.out.println(c5); //c
- 字符类型本质
- 字符型存储到计算机中,需要将字符对应的码值(整数)找出来
- 字符和码值的对应关系是通过字符编码表决定的
- 常用的字符编码表有
- ASCII(ASCII编码表一个字节表示,一共128个字符,实际上一个字节可以表示256个字符,只用128个)
- unicode (unicode编码表 固定大小的编码,使用两个字节来表示字符,字母和汉字同意都是占用两个字节,这样浪费空间)
- utf-8 (大小可变的编码,字母用一个字节,汉字使用三个字节)
- gbk (可以表示汉字,而且范围广,字母使用一个字节,汉字使用两个字节 65536)
- gb2312
- big5码
布尔类型
注意事项:不能用0或非0的整数替代false和true
基本数据类型转换
- 自动类型转换
- 当java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换。
- 数据类型按精度(容量)大小排序为:
- char - > int - > long - > float - > double
- byte - > short - > int - > long - > float - > double
int num = 'a' // char -> int
double d1 = 80 // int -> double
System.out.println(num) //97
System.out.println(d1) //80.0
- 自动类型转换细节
- 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
- 当我们把精度(容量)大的数据类型赋值给精度小的数据类型时,就会报错,反之就会进行自动类型转换
- (byte,short)和char之间不会相互自动转换
- byte, short, char 他们三者可以计算,在计算时首先转换为int类型
- boolean 不参与转换
- 自动提升原则:表达式结果的类型自动提升为操作数中最大的类型
强制类型转换
- 强制符号只针对于最近的操作数有效,往往会使用小括号提升优先级
- char类型可以保存Int的常量值,但不能保存int的变量值,需要强转
char c1 = 100; //ok
int m = 100; //ok
char c2 = m; //错误
char c3 = (char)m; //ok
System.out.println(c3); //100对应的字符d
- byte和short类型在进行运算时,当作int类型处理
string和基本数据类型的转换
- 基本类型转String类型
- 语法:将基本类型的值+""即可
int n1 = 100; boolean b1 = true; double n2 = 3.4; String str1 = n1 + ""; String str2 = b1 + ""; String str3 = n2 + "";
- String类型转基本数据类型
- 语法:通过基本类型的包装类调用parseXX方法即可
- 字符串转成字符char, 含义是指 把字符串的第一个字符取出来
Integer.parseInt("123");
Double.parseDouble("123.1");
Float.parseFloat("123.45");
Boolean.parseBoolean("true");
Byte.parseByte("12");
- String转基本类型细节
- 在将String类型转成基本数据类型时,要确保String类型能够转成有效的数据,比如我们可以把"123",转成一个整数,但是不能把"hello"转成一个整数
- 如果格式不正确,就会抛出异常,程序就会终止