变量:变量就是在程序运行过程中,其值可以发生变化的量。
变量就是一个存储数据的容器。容器特点:1.容量(大小);2.存储一定格式的数据;3.名字
声明(定义)一个变量的格式:数据类型 变量名字;
数据类型 变量名字 = 数据值;
数据类型 变量名1,变量名2,变量名3; //一次声明多个相同类型的变量
变量名1 = 值1; //给变量赋值
变量名2 = 值2;
变量名的命名规范:首单词小写,其他单词首字母大写,其他小写。
变量的特点:1.变量是必须先声明,后使用;2.在一个作用域中,不能声明同名的变量。
java表示一个变量的容器多大是使用了数据类型描述的。
在java中主要有两种数据类型:基本数据类型(有8种)、引用数据类型(字符串类型:String)。
java中的八种基本数据类型:
整数的数据类型:
byte(字节) 8bit(位) 2^8=256 -128~127
short(短整型) 16bit 2^16=65536
int(整型) 32bit 2^32=
long(长型) 64bit 2^64=
注意,如果一个整数没有加上任何的标识的时候,那么默认就是int类型的数据。如果需要把该数据变为一个long类型的数据,那么需要在数据后边加上L表示,L是不区分大小写的。
疑惑:存储整数有四种数据类型,那么具体怎么选择使用呢?
选择数据类型的原则:在能满足需求的情况下,理论上,能小就小,这样能节省我们的内存空间;
但是,在现实开发中,存储整数,一般都使用int类型,存储小数,一般都使用double类型。
小数的数据类型:
float(单精度浮点型) 32bit 保留7个小数位
double(双精度浮点型) 64bit 保留15个小数位
注意,如果一个小数没有加上任何标识的时候,那么该小数默认是double类型的数据。如果需要表示成float类型的数据,那么需要在小数的后面加上f表示,f不区分大小写。例如:float f=3.14f;
布尔类型:布尔类型只有两个值,true 或者 false。
boolean 占1个字节或4个字节的内存(java规范2.0中sun公司给出的权威解释)
如果使用boolean声明一个基本类型的变量时,那么该变量占4个字节;
如果使用boolean声明一个数组类型的时候,那么每个数组的元素占1个字节。
字符类型:
char 占2个字节 (16bit)
总结java的八种基本数据类型:
整数类型:byte、short、int、long;
小数类型:float、double;
布尔类型:boolean;
字符类型:char;(例如,char c = 'a'; //字符赋值用单引号)
字符串类型:String 属于引用类型,不属于基本类型。(例如,String str = "a"; //字符串赋值用双引号,String str = "";即字符串的值为空)
小数据类型-------->大数据类型 自动类型转换
大数据类型-------->小数据类型 强制类型转换
强制类型转换格式: 小数据类型 变量名 = (小数据类型)大数据类型的变量名
【例如:int i = 10;
byte b = (byte) i;】
数据类型转换要注意的细节:
1.凡是byte、short、char数据类型的数据,在运算的时候都会先自动转换成int类型的数据在运算。
【例如:byte b1 = 1;
byte b2 = 2;
byte b3 = (byte)(b1 + b2);】
【例如:System.out.println('a'); //输出结果是a
System.out.println((int)'a'); //输出结果是97(a字符在计算机中所对应的数字)
System.out.println('a'+1); //输出结果是98 】
2.两个不同数据类型的数据在运算的时候,结果 取决于大的数据类型;
【例如:int i = 10;
long l = 20;
i = (long)i + l; //此处若i前不加long的话 会报错
System.out.println(i); 】
3.A.以下例子不会报错,为什么?//10是一个常量,编译器在编译的时候就能够确认常量的值了,byte b=10,在编译到这的时候,java编译器就会检查到10并没有超出byte的表示范围,所以允许赋值。
【例如:byte b = 10; //一个整数没有加上任何标识的时候,默认是int类型的数据;
System.out.println(b);】
3.B.以下例子会报错,为什么?//java编译器在编译的时候,并不能确认变量所存储的值,变量存储的值是在运行的时候才在内存中分配空间的。
【例如:int i = 10; //javac编译时只是检查10这个值有没有超过 i 这个int类型数据的值的范围
byte b = i; //编译到这时,i并没有存储值,编译时检测到i是int型变量,大于byte型变量b,故报错
System.out.println(b);】
注意:在计算机中,如果一个二进制数据的最高位是1,那么该数据一定是负数;如果一个二进制数据的最高位是0,那么该数据一定是正数。负数在计算机中存储的是补码。
验证:System.out.println(Integer.toBinaryString(-7)); //Integer.toBinaryString()是sun提供的一个功能,用来查询一个数据的二进制数据形式。
原理,负数的存储过程:
1.先取负数的绝对值,求出该绝对值的二进制形式(原码);
2.原码取反得到反码;
3.反码+1得到了补码。
举例:1. -7的绝对值是 7, 7对应的二进制是111,前边补0即 0000 0111,此值即原码;
2. 原码0000 0111取反,即1变0、0变1,得到 1111 1000,此值即反码;
3. 反码+1得到 1111 1001,此值即补码。
倒推:如何通过补码求出真实的数据:
1.补码先-1; 2.取反; 3.在数据前面加上负号即可。