在Java中,C语言中的常量被称为字面常量,在这里就简单的提一下
字面常量的分类
字符串常量,字符型常量,整形常量,浮点型常量,布尔型常量,空常量
数据类型
四类
在Java中,数据类型分为四类
整形,浮点型,字符型,布尔型
八种
八种就是是四类的细分
字节型(byte)
短整型(short),整形(int),长整型(long)
单精度浮点型(float),双精度浮点型(double)
字符型(char)
布尔型(boolean)
这里值得注意的是,在Java中,字符型(char)所占的内存是2字节
字节型的(byte)所占的内存是1字节
在Java虚拟机中,并没有明确规定布尔型(Boolean)所占的字节,也没有专门处理布尔型的字节码指令
变量
变量概念
经常改变内容
相信这些变量的能表示的范围不需要多讲,在网上搜搜就知道了
只需要注意的是,在Java中没有什么“无符号整数”这种说法,最高位就是符号位,然后能表示的范围就除去符号位就可以了
整型变量
1. 字节型变量
byte + byte
看下面的代码
public class Text {
public static void main(String[] args) {
byte a = 10;
byte b = 10;
// byte ret = a + b;
System.out.println(a + b);
}
}
编译可以通过运行的结果是20,但是稍微一改就不行了
public class Text {
public static void main(String[] args) {
byte a = 10;
byte b = 10;
byte ret = a + b;
System.out.println(ret);
}
}
明明是字节型与字节型相加,为什么会说“从int转换到byte可能会损失”?
在接下来的类型转换中会提到。
2. 短整型变量
3. 整型变量
4. 长整型变量
浮点型变量
1. 单精度浮点型
2. 双精度浮点型
字符型变量
布尔型变量
类型转换
自动类型转换(隐式)
简单地说就是,代码不需要任何处理,在代码编译时,编译器会自动进行处理
特点:数据范围小的转为数据范围大的就会自动进行。
例如
public class Text731 {
public static void main(String[] args){
int a = 10;
long b = 10L;
long ret = a + b;
System.out.println(ret);
}
}
两个类型不一样的相加,并不会出现编译错误,Java会自动提升a为long型
强制类型转换(显式)
要经过一定的格式处理才能完成
特点:数据范围大的转为数据范围小的
同样的例子
public class Text731 {
public static void main(String[] args){
int a = 10;
long b = 10L;
int ret = (int)(a + b);
System.out.println(ret);
}
}
a与b相加储存到类型为int的变量ret中,只能将a + b的值强制转换为int才可以通过编译
类型提升
byte与byte的运算
public class Text {
public static void main(String[] args) {
byte a = 10;
byte b = 10;
byte ret = a + b;
System.out.println(ret);
}
}
上面的代码新手乍一看是没毛病,但是就是编译不通过
计算机的CPU通常是按照四个字节为单位从内存中读取数据,为了硬件上实现方便,注入byte和short这种地域4个字节的类型,CPU会提升成int,再参与计算
所以说,在进行a + b这个操作是,a和b其实已经是int型了,所以就会出现编译不通过的情况
public class Text731 {
public static void main(String[] args){
short a = 10;
short b = 10;
short ret = a + b;
System.out.println(ret);
}
}
同样的short类型也是会出现同样的错误
总的来说,Java确实比C语言安全系数 要高很多