1.1 java 的 8 种基本数据类型 装箱 拆箱
Byte short int long float double boolean char
封装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
1.2基本类型之间的转换Float:单精度(4字节) Double:双精度(8字节) '\n’表示换行符
1.自动类型提升:(当表示数范围小的类型与表示数范围大的类型做运算时,会自动转换为范围大的类型)byte ,char(单引号),short< int< long< float< double;当byte,char,short三种类型做运算时要用int接收;
‘a’=97,’A’=65;
1.1.4 short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 +=1;有什么错?
-
对于 short s1=1;s1=s1+1 来说,在 s1+1 运算时会自动提升表达式的类型为 int, 那么将 int 赋予给 short 类型的变量 s1 会出现类型转换错误。
-
对于 short s1=1;s1+=1 来说 +=是 java 语言规定的运算符,java 编译器会对它 进行特殊处理,因此可以正确编译。
2.强制类型转换(大变小,截断运算,不是四舍五入),可能会导致精度损失
整型常量默认为int;
浮点型常量默认为double;
11111111:无符号数为255;有符号,因为计算机存放的是补码,所以是-127
String类型(引用数据类型,双引号)
String与基本数据类型只能做连接“+”运算,结果为string
char+int变为int,char+char变为int,char+string变为字符串,int+string变为字符串
String与基本数据类型的转换要通过包装类来实现!!!
1.1.5.Int 与 Integer 区别
1.Integer是int的包装类,int是java的一种基本数据类型
2.Integer变量必须实例化后才能使用,而int变量不需要
3.Integer实际是对象的引用,当new一个Integer时,实际是生成一个指针对象;而int则是直接存储数据值
4.Integer的默认值是null,int的默认值是0
关于Integer和int的比较:
//1.此时==比较的是地址值,只要是new的对象,地址值都是不一样的
Integer i=new Integer(100);
Integer j=new Integer(100);
System.out.println(j==i);//false
//2.Integer和int类型用==比较时,Integer会有一个自动拆箱的过程,
//它们比较的是值的大小是否相等
Integer i=new Integer(100);
int j=100;
System.out.println(j==i);//true
//非new生成的Integer变量和new Integer()生成的变量比较时,
// 结果为false。(因为非new生成的Integer变量指向的是java常量池中的对象,
// 而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同
Integer i=new Integer(100);
Integer j=100;
System.out.println(j==i);//false
//对于两个非new生成的Integer对象,进行比较时,
//如果两个变量的值在区间-128-127之间,则结果为true,否则结果为false
/*
Integer类型在-128到127范围之间是被缓存了的,
也就是每个对象的内存地址是相同的,赋值就直接从缓存中取,
不会有新的对象产生,
而大于这个范围,将会重新创建一个Integer对象,也就是new一个新对象,地址值会有不同
*/
Integer i=100;
Integer j=100;
System.out.println(j==i);//true
Integer i=500;
Integer j=500;
System.out.println(j==i);//false