Java中的变量
变量:就是程序运行期间,其值可以发生改变,需要先声明变量的类型,声明一个变量后,这个变量可以理解为用来存储数据的容器。
变量的声明和使用:
Java是一门强类型语言,所有的变量和数据都是具备类型的。
变量的声明可以先声明后初始化,也可以将声明和初始化放在同一行;
//先声明,后初始化,声明了一个int类型的变量,name为a,初始化为0;
int a;
a = 0;
//声明初始化放同一行
int a = 0;
tips: 注意变量在使用之前一定要先声明,并保证初始化了。
变量使用过程中问题:
可以重复使用
变量不能重复定义(不能重复定义变量名相同的变量)
// 测试变量使用过程中的问题:
public class VariableUsed{
public static void main(String[] args){
// 先声明后初始化 ,才能使用
// 1 声明一个变量之后
int num = 10;
//int num = 11 是否可以重复声明:不可以
System.out.println(num);
// 2: 可以重新给num赋值
num = 20;
System.out.println(num);
}
}
变量的三要素:变量名 变量类型 作用域(生命周期)
Java中的数据类型
byte字节型
类型 | 存储空间 | 表数范围 |
byte字节型 | 1字节(8位) | [-128,127] |
注意:给byte数据类型赋值的时候千万注意不要超过byte的范围。
short短整型
类型 | 存储空间 | 表数范围 |
short短整型 | 2字节(16位) | [-32768,32767] |
注意:给short数据类型赋值的时候千万注意不要超过short的范围。
int整型(最常用)
类型 | 存储空间 | 表数范围 |
int整型 | 4字节(32位) | [-2^31,2^31-1] |
long长整型
类型 | 存储空间 | 表数范围 |
long长整型 | 8字节(64位) | 非常大[2^-63,2^63-1] |
注意事项:
在java程序中,所有的字面整数值都是int类型:
当将一个超过了int范围的字面值赋值给long类型的变量的时候,需要将这个字面值后加L(推荐)或者是l。
如果当前字面值没有超过右侧的变量类型,可以正常赋值。
实际开发中也会存在long类型存储不下的情况,解决方案就是修改单位,如果这种大数运批次很高,欢迎修改技术栈,不要用java。
// 测试整数的初始化方式
public class InitInteger{
public static void main(String[] args){
// 1:赋值方式 不同的进制赋值
int n = 10; // 十进制赋值
System.out.println(n);
//2: 二进制赋值 JDK1.7之后允许
n = 0B1010;
System.out.println(n);
//3:八进制赋值
n = 0112;
System.out.println(n);
//4:十六进制赋值
n = 0XFFFF; // 65535
System.out.println(n);
//5:通过下划线分割数字
n = 123_456_789;
System.out.println(n);
}
}
原码,反码,补码:
计算机中的有符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同 。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。
正数: 原码,反码,补码相同。
负数: 反码 = 原码除符号位,按位取反(1变为0,0变为1)
补码 = 反码+1
Java类型转换
自动类型转换:小转大 自动转
byte b = 10;
int n = b; // 类型转换 自动类型转换
System.out.println(n);//10
System.out.println(b);//10
}
}
四则运算的转换顺序:
char ch = 'a';
byte num = 20;
int result = ch+num+10;//127
Tips: 四则运算过程中,如果左右两边是字面值('a',10,2.4) 会进行常量折叠,也就是说,在编译器编译期间会将这个值进行计算,但如果存在变量,那么四则运算过程就进行类型转换。
强制类型转换:
大变小,需强转; 数据有风险,转换需谨慎。
转换格式:小类型 = (小类型)大类型;
byte b = (byte)1200;
例如:
public class Test{
public static void main(String[] args){
// 声明一个int类型的变量
int num = 10;
// 声明一个byte类型的变量b
byte b = (byte)num;
// 重新给num赋值
num = 130;
b = (byte)num;
System.out.println(num);
/*
为什么出来的是-126?
A:获取130这个数据的二进制。
00000000 00000000 00000000 10000010
这是130的原码,也是反码,还是补码。
B:做截取操作,截取8位,截成byte类型的了。
1000 0010
这个结果是补码。
C:已知补码求原码。
符号位 数值位
补码: 1 0000010
反码: 1 0000001
原码: 1 1111110
*/
System.out.println(b); // -126
}
}