开局一张图:
内置数据类型,分为四类八种
四类分别是整数型,浮点型,字符型,布尔型。
数据类型 | 关键字 | 描述 | 范围 |
---|---|---|---|
整数型 | byte | 8位有符号的,默认值为0 | -128(- 2 7 2^7 27)~ 127( 2 7 2^7 27-1) |
整数型 | short | 16位有符号的,默认值为0 | - 2 15 2^{15} 215 ~ ( 2 15 2^{15} 215-1) |
整数型 | int | 32位有符号的,默认值为0 | - 2 31 2^{31} 231 ~ ( 2 31 2^{31} 231-1) |
整数型 | long | 64位有符号的,默认值为0L | - 2 63 2^{63} 263 ~ ( 2 63 − 1 ) 2^{63}-1) 263−1) |
浮点型 | float | 单精度、32位,默认值为 0.0f | -3.4e-38 ~ 3.4e+38) |
浮点型 | double | 8位有符号的,默认值为0.0d | -1.79e+308 ~ 1.79e+308 |
字符型 | char | 单一的 16 位 Unicode 字符,默认值为’u0000’ | 0 ~ 65535 |
布尔型 | boolean | 表示一位的信息,默认值为false | 只有 true 和 false |
注意long类型和float类型需要加L或F标识(小写大写均可)
long a = 999999L;
float b =2.3f;
将最高位作为符号位(以0代表正,1代表负),其余各位代表数值本身的绝对值(以二进制表示)
+7的原码为: 00000111
-7的原码为: 10000111
一个数如果为正,则它的反码与原码相同;一个数如果为负,则符号位为1,其余各位是对原码取反。
+7的反码为: 00000111
-7的反码为: 11111000
—个数如果为正,则它的原码、反码、补码相同;一个数如果为负,则符号位为1,其余各位是对原码取反,然后整个数加1。
+7的补码为: 00000111
-7的补码为: 11111000+1=11111001
已知一个数的补码,求原码的操作分两种情况:
(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。
(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。
(也可以先将补码二进制减去1,再对除了符号位的其余各个位取反)
从简单记忆的角度,可以把基本数据类型(8种)以外的都可以看成引用数据类型,所以常见的class类,数组,字符串都是引用数据类型
下面来看一下两者的具体区别:
首先基本数据类型开辟的是栈内存,并且变量存储的是真实的数据
而引用数据类型,开辟栈空间和堆空间,变量存储的是地址值,是使用了其他空间的数据
总结一下——从内存的角度去理解
对象、数组都是引用数据类型,使用new关键字创建出来的类型都是引用数据类型。所有引用类型的默认值都是null。
一定要注意基本数据类型和引用数据类型的赋值,基本数据类型,赋的是真实值,所以赋值后不改变原来的值,但引用数据类型赋的是地址值,修改赋值后的,会影响原来的。
在方法值传递时:
方法在传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实参的值
方法在传递引用数据类型时,传递的是地址值,形参的改变,影响实参的值
public static void main(String[] args) {
Student s1 = new Student("zhangsan",23);
Student s2 = s1;
s2.setAge(21);
s1.show(); // show的功能是输出年龄和姓名
s2.show();
}
运行结果发现,s1和s2的show一样
姓名:zhangsan 年龄:21
姓名:zhangsan 年龄:21
另外 数组赋值,字符串比较也是一样
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
转换从低级到高级
byte,short,char—> int —> long—> float —> double
基本规则:
char c1='a';//定义一个char类型
int i1 = c1;//char自动类型转换为int
System.out.println("char自动类型转换为int后的值等于"+i1);
输出:
char自动类型转换为int后的值等于97
条件是转换的数据类型必须是兼容的。
int i1 = 123;
byte b = (byte)i1;//强制类型转换为byte
参考链接:
https://www.bilibili.com/video/BV17F411T7Ao?p=131&share_source=copy_web&vd_source=fa075f0e5dab81ef7c98b9eb4c47d9a7
https://www.runoob.com/java/java-tutorial.html