JAVA 常量
常量: (命名规范: 字母全部大写,单词之间用 "_"进行分隔 )
(1)在程序执行过程中,其值不发生改变的值;
(2)在编译时期就能确定其值;
分类:
1. 字面值常量
2. 自定义常量
字面值常量
1. 字符串常量: “hello”, “world”
2. 整数常量: 100, 200 默认是 int类型,
3. 小数常量: 1.2 默认是double类型
4. 字符常量: ‘a’, ‘b’
5. 布尔常量: true, false
6. 空常量: null
变量: 内存中分配的一块空间;
java中的8种基本数据类型:
(1) 整型 byte (1字节) short(2字节) int (4字节或者8字节) long(8字节)
1字节为8bit, 为内存存储的基本单位
int为计算机运算的基本单位, 32bit/64bit
数字常量默认为 int类型; 注意 long i =100000000000是会编译报错的,因为10000~默认是int类型,但是已经溢出了;
(2) 浮点型 float(4字节) double(8字节)
(3) 字符类型 char (1字节)
(4) 布尔型 boolean(1字节) 仅含有 true,false两个值;
(5) 字符串类型 String 不属于基本数据类型,而是引用数据类型
变量声明方式:
(1) 数据类型 变量名
(2) 数据类型 变量名1, 变量名2
变量必须先声明再使用, 同一个作用域中不能声明同名的变量
int age, height;
age = 10;
height = 170;
System.out.println( age );
System.out.println(height);
数据类型的转换 (不同数据类型的赋值,以及数学运算)
(1) 小数据类型 --------> 大数据类型 自动转换
(2) 大数据类型 --------->小数据类型 需要强制类型转换才能实现
/*
小精度数据 转 大精度数据 -->隐式转换,自动转换
*/
byte b = 11;
short s = b;
int i = s;
System.out.println("i:"+i);
/*
大数据类型 --> 小数据类型 需要强制转换,否则编译器报错
*/
/*
为什么b为 -128的原因?
这也是为什么大数据-->小数据类型 时,编译器报错的原因, 因为数据精度可能丢失,导致数据不正确, 如果程序的确有必要这样转,请显示声明转换;
另外:在计算机中,整数都是以补码的形式存储的;且最高位是符号位,b是1字节数据,但是此时b的数据为 100000000,就表示为一个负数了,且数字为128;
*/
int i = 128;
byte b = (byte)i;
System.out.println(b); //-128
/*
凡是byte,short,char数据类型数据在运算的时候,都会自动转成int类型的数据再进行运算;因为int的位数是计算机运算的基本单位;
b1 + b 2 ,此时表达式的值 是 int类型的数据, 而int->byte需要强制转换
*/
byte b1 = 1;
byte b2 = 2;
byte b3 = (byte)(b1+b2);
System.out.println("b3:"+b3);
/*
两个不同类型的数据在运算的时候,结果的数据类型 取决于大的数据类型;
(int + long)---> (隐士转换)long ---->需要强转成 int
*/
int i = 10;
long l = i;
i = (int)(i+1);
System.out.println("i:"+i);
/*
(1) byte b = 10;
(2) int i = 10;
b = i;
为什么前者不报错,后者报错?
因为,10是常量,编译器在编译的时候就能够确定常量的值了,此时编译器能够检查到10并没有超出byte的表示范围,所以允许赋值;
而int i=10, i的值不能在编译时期确定其值,需要在运行时才能够确定i的值,所以有可能精度丢失,而报错;
*/