一、两大数据类型、基本类型中每种类型的取值范围和默认值
两大数据类型:基本数据类型和引用数据类型。
基本数据类型:byte,short,int,long,float,double,char,boolean
引用数据类型:类(对象),接口(实例),数组。
基本类型取值范围和默认值:
byte:
- 最小值:-128(-2^7);
- 最大值:127(2^7-1);
- 默认值:0;
short:
- 最小值:-32768(-2^15);
- 最大值:32767 (2^15-1);
- 默认值:0;
int:
- 最小值:-2147483647(-2^31);
- 最大值:2147483647(2^31-1);
- 默认值:0;
long:
- 最小值:-9223372036854775808 (-2^63);
- 最大值:9223372036854775807 (2^63-1);
- 默认值:0;
float:
- 最小值:1.4E-45;
- 最大值:3.4028235E38;
- 默认值:0.0f;
double:
- 最小值:4.9E-324;
- 最大值:1.7976931348623157E308;
- 默认值:0.0d;
char:
- 最小值:\u0000(0);
- 最大值:\uffff (65535);
- 默认值:0;
boolean:
- 取值:true 和 false;
- 默认值:false;
二、整型溢出的情况
上溢出:存储数值超过了整形数值2^31-1,导致数据向上溢出。
下溢出:整数数值小于了-2^31,导致数值向下溢出。
请看下面一段代码:
int a = Integer.MAX_VALUE/2+1; //1073741824
int b = Integer.MAX_VALUE/2+1;
int overflow = a + b;
System.out.println(overflow); //-2147483648
可以看到 a+b 溢出了int型的最大值,解决这个问题可以将a,b和overflow都转为long型。
long overflow= (long)a+ (long)b;
三、基本类型的包装类及其高频区间数据缓存范围
基础数据类型的包装类:Integer,Long,Double,Float,Boolean,Byte,Short,Character。
Double和Float没有缓存,其他类型都有高频缓存区间。其高频缓存区间的缓存范围是:
Boolean:使用静态final,就会返回静态值
Byte:-128~127
Short:-128~127
Character:0~127
Long:-128~127
Integer:-128~127
四、自动装箱和自动拆箱
自动装箱: 当我们把一个基本类型的值,赋值给引用变量时候,系统可以自动将它“包装”为相应的包装类的实例程序需要对象时, 如果给的只是一个基本类型的值, 系统会将它自动装箱为包装类的实例达到的效果。
自动拆箱: 当我们需要一个基本类型的值时, 但实际上传入的包装类的对象。 系统会自动把对象“剥”开,得到它的值。
public class Main {
public static void main(String[] args) {
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1==i2);
System.out.println(i3==i4);
}
}
//true
//false
i1和i2的数值为100,因此会直接从cache中取已经存在的对象,所以i1和i2指向的是同一个对象.而i3和i4指向的是不同的对象。
五、int与Integer的区别,以及互相转换
int 是基本类型,直接存数值;而integer是对象,用一个引用指向这个对象。
int属于基本数据类型,而integer属于包装数据类型。
1.int是基本的数据类型
2.Integer是int的封装类
3.int和Integer都可以表示某一个数值
4.int和Integer不能够互用,因为他们两种不同的数据类型
int到Integer:
int a=3;
Integer A=new Integer(a);
或者:
Integer A=Integer.valueOf(a);
Integer到int:
Integer A=new Integer(5);
int a=A.intValue();
六、逻辑运算符&和&&的区别、逻辑运算符&与位运算符&的区别
&&和&都表示and运算,当两边的数都为true的时候才为true的时候才为真,否则为false、不同的是,&是运算符的左右两边的算式子进行运算,再进行计算,而&&符是从左边运算,第一个式子如果错误,那么就不在对右边算式进行运算。用&&的目的是加快运算速度,但也要防止用法上的问题。
逻辑运算符只能对boolean类型进行比较,但是位运算符还可以对数字进行比较。逻辑运算符存在短路的现象,即前边的表达式可以得到最终结果是,后面的表达式就不被执行。而位运算符不存在短路现象,位运算是把两边的数据全部变成二进制补码的形式,然后进行计算的。
七、跳出多重循环
break会跳出(终止)当前循环。
continue是跳出当前循环,开始下一循环。
return是结束方法
如果需要从多层循环跳出,则需要使用标签,定义一个标签(label),然后再在需要跳出的地方,用break (label)就行了