一.Java包含哪两大类数据类型?其中基本类型的每种类型的取值范围和默认值分别是多少?
基本类型和引用类型
基本类型:
数据类型 | 类型长度 | 取值范围 | 默认值 |
---|---|---|---|
byte | 8位 | -27~27-1 | 0 |
short | 16位 | -215~215-1 | 0 |
int | 32位 | -231~231-1 | 0 |
long | 64位 | -263~263-1 | 0L |
float | 32位 | 1.4E-45~3.4E+38 | 0.0f |
double | 64位 | 4.9E-324~1.7E308 | 0.0d |
char | 16位无符号整数(Unicode) | 0~65535 | ‘u0000’ |
boolean | false |
二.Java在什么情况下会发生整型溢出?请举例说明,并给出解决方案
超出了可表示范围
public static void main(String[] args){
int m=Integer.MAX_VALUE/2+1;//1073741824
int n=Integer.MAX_VALUE/2+1;
int overflow=m+n;
System.out.println(overflow);//-2147483648
}
可修改为
public static void main(String[] args){
int m=Integer.MAX_VALUE/2+1;//1073741824
int n=Integer.MAX_VALUE/2+1;
long normal=(long)m+n;
System.out.println(normal);//2147483648
}
三.Java基本类型的包装类分别是哪些?其高频区间数据缓存范围分别是什么?请选择一种包装类型编程验证其数据缓存特性。
普通数据类型 | 对应的包装类 | 高频区间数据缓存范围 |
---|---|---|
char | Character | 0~127 |
byte | Byte | -128~127 |
short | Short | -128~127 |
int | Integer | -128~127 |
long | Long | -128~127 |
float | Float | 无 |
double | Double | 无 |
boolean | Boolean | 使用静态final,就会返回静态值 |
- 如果所使用的包装类的值在这个缓存区间内,就会直接复用已有对象,在缓存区间之外的数值会重新在堆上产生。所以在判断是否相等时不要用 “==”,用equals
Integer i1 = 127;
Integer i2 = 127;
i1 == i2 ->true
Integer i3 = 128;
Integer i4 = 128;
i3 == i4 ->false
四.什么是自动装箱,什么是自动拆箱,请举例说明。
- 自动装箱 ——将基本数据类型自动转换为封装类型(基础类型->对象)
- 自动拆箱 ——将封装类型自动转换为基本数据类型(对象->基础类型)
int i = 0; //创建基础类型
Integer i0 = i; //自动装箱
int j = i; //自动拆箱
五.int和Integer有什么区别,他们之间的相互转化是怎样的?请通过JDK文档自主学习Integer类,对主要方法进行测试。
- int是基本数据类型,Integer是其对应的包装类
- int转Integer
int a = 5; Integer A = new Integer(a);//方法一 Integer A = Integer.valueOf(a);//方法二
- Integer转int
Integer A = new Integer(5); int a = A.intValue();
六.逻辑运算符&和&&的区别是什么?逻辑运算符&与位运算符&的区别是什么?请分别举例说明。
1.逻辑运算符&:
运算符左右两边表达式均需首先进行运算,然后再对其结果进行与运算。
2.逻辑运算符&&:
短路,若左边运算可以确定运算结果,则不用执行右边。
1.逻辑运算符&:
参与运算的都是布尔值
x&y:x,y均为true时,结果为true
2.与位运算符&:
按位与
七.Java语言中可以采取什么语句跳出多重循环?请举例说明。
- break:跳出本层循环
- break lab:跳出多重循环的外层循环
- 必须在外循环入口语句的前方写上lab标号,可以使程序流程退出标号所指明的外循环
lab:
for(int i=0;i<2;i++){
for(int j=0;j<10;j++){
if(j>1){
break lab;
}
System.out.println("break");
}
}
/*输出结果:
break
break
*/
- continue:跳出本层的本次循环,继续本层的下一次循环
- continue lab:跳出外层的本次循环,继续外层的下一次循环
- 当程序中有嵌套的多层循环时,为从内循环跳到外循环
lab:for(int i=0;i<2;i++){
for(int j=0;j<10;j++){
if(j>1){
continue lab;
}
System.out.println("continue");
}
System.out.println("*********");
}
/* 输出结果:
continue
continue
continue
continue
*/