我的第二次JAVA作业
1. Java包含哪两大类数据类型?其中基本类型的每种类型的取值范围和默认值分别是多少?请编程验证。
Java 的两大数据类型:
-
基本类型
-
引用类
基本数据类型:
整数类型:
byte:
- byte 数据类型是8位、有符号的,以二进制补码表示的整数;
- 最小值是 -128(-2^7);
- 最大值是 127(2^7-1);
- 默认值是 0;
- byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
- 例子:byte a = 100,byte b = -50。
short:
- short 数据类型是 16 位、有符号的以二进制补码表示的整数
- 最小值是 -32768(-2^15);
- 最大值是 32767(2^15 - 1);
- Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
- 默认值是 0;
- 例子:short s = 1000,short r = -20000。
int:
- int 数据类型是32位、有符号的以二进制补码表示的整数;
- 最小值是 -2,147,483,648(-2^31);
- 最大值是 2,147,483,647(2^31 - 1);
- 一般地整型变量默认为 int 类型;
- 默认值是 0 ;
- 例子:int a = 100000, int b = -200000。
long:
- long 数据类型是 64 位、有符号的以二进制补码表示的整数;
- 最小值是 -9,223,372,036,854,775,808(-2^63);
- 最大值是 9,223,372,036,854,775,807(2^63 -1);
- 这种类型主要使用在需要比较大整数的系统上;
- 默认值是 0L;
- 例子: long a = 100000L,Long b = -200000L。
"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。
浮点类型:
float:
- float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
- float 在储存大型浮点数组的时候可节省内存空间;
- 默认值是 0.0f;
- 浮点数不能用来表示精确的值,如货币;
- 例子:float f1 = 234.5f。
double:
- double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;
- 浮点数的默认类型为 double 类型;
- double类型同样不能表示精确的值,如货币;
- 默认值是 0.0d;
-
例子:
double d1 = 7D ; double d2 = 7.; double d3 = 8.0; double d4 = 8.D; double d5 = 12.9867;
7 是一个 int 字面量,而 7D,7. 和 8.0 是 double 字面量。
字符类型:
char:
- char 类型是一个单一的 16 位 Unicode 字符;
- 最小值是 \u0000(十进制等效值为 0);
- 最大值是 \uffff(即为 65535);
- char 数据类型可以储存任何字符;
- 例子:char letter = 'A';。
布尔类型:
boolean:
- boolean数据类型表示一位的信息;
- 只有两个取值:true 和 false;
- 这种类型只作为一种标志来记录 true/false 情况;
- 默认值是 false;
- 例子:boolean one = true。
2. Java在什么情况会发生整型溢出?请举例说明,并给出解决方案。
一个整形数据类型的数值超过了该类型的取值范围时会发生整形溢出。
举例:
public class test { public static void main(String[] args){ int i =128; byte b = (byte)i; System.out.println(b); } }
因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
解决方法:按照符合相应数据类型的取值范围进行赋值或转换。
3. 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,就会返回静态值 |
4.什么是自动装箱,什么是自动拆箱,请举例说明。
自动装箱:将基本类型用它们对应的引用类型包装起来
自动拆箱:将包装类型转换为基本数据类型
实例化一个对象,
Test test = new Test(参数);
而包装类,可以这么写:
Integer a = 100; 这是自动装箱;
int b =a ; 这是自动拆箱
5. int与Integer有什么区别,它们之间的相互转化是怎样的?
区别:
int是基本数据类型,int变量存储的是数值。Integer是引用类型,实际是一个对象,Integer存储的是引用对象的地址。
转化:
(1).基本数据类型转包装类对象用构造方法
Integer vari=new Integer(5)
(2).包装类对象转基本数据类型要调用该对象的对应方法
调用intValue()方法
6. 逻辑运算符&和&&的区别是什么?逻辑运算符&与位运算符&的区别是什么?请分别举例说明
逻辑运算符&&和&的区别
&&和&这两个逻辑运算符是使用在关系条件表达式当中,&&连接的表达式中,从左往右依次判断执行,当执行结果为false的时候,后面的表达式就不执行了。&连接的表达式中,也是从左往右依次执行,当执行结果为false的时候,后面的表达式要继续执行到结束。因此,使用&&连接的表达式执行效率相对于&在某些情况下要快一些。
int a=1,b=2; //定义两个整形变量,分别赋值为1、2
if(a==2&&b>a&&++a==b) //条件表达式的值是false,当判断a==2为false时,后面的b>a和++a==b就不执行了,a的值为1
if(a==2&b>a&++a==b) //条件表达式的值是false,当判断a==2为false时,后面的b>a和++a==b继续执行,a的值为2
逻辑运算符&和位运算符&区别
位运算符&:用于位运算,如果相对应位都是1,则结果为1,否则为0;
例如:假设整数变量A的值为60和变量B的值为13。即A = 0011 1100
B = 0000 1101。
则(A&B),得到12,即0000 1100。
逻辑运算符&:当&两侧的值都为真时,结果才为真,
例如:
int i = 5,j = 3;则(++i=2)&(j++=4)的结果为false:
先判断++i=2是否成立,结果为false,继续判断下一个表达式是否成立,j++=4,该表达式成立。但是&逻辑运算符要求两侧的值都为真时,结果才为真。
因为JAVA逻辑运算符两侧只能跟表达式,所以二者符号可以一致。
7. Java语言中可以采用什么语句跳出多重循环?请举例说明
(1).break语句
break用于switch语句的是结束一个switch语句。
break在循环语句中的作用是结束当前所在的循环语句。
使用break可以跳出循环,默认情况下是跳出最里层的循环,假如我们要跳出多层循环怎么办呢,Java替我们已经做好了这一点,就是用 ,在 break 后面加上标号,当符合 break 条件时,程序就会跳到规定的循环处。
e.g.
first:
for (int i = 0; i <5 ; i++) {
second:
for (int j = 0; j <4 ; j++) {
for (int k = 0; k < 3; k++) {
if(k==2) break first;//跳出first循环
if(k==3) break second;//跳出second循环
}
}
(2).continue语句
continue语句只能用于循环结构中,其作用是是使循环短路,也就是说不跳出当前循环,结束本次循环(结束当前循环),执行下一轮循环。
continue语句也有标号的用法。
e.g.
public void continueLabelTest(){
outer:
for(int i = 0; i<5; i++){
for(int j = 0; j<6; j++){
if(j == 4){
continue outer;
}
System.out.println(j);
}
System.out.println("test");
}
System.out.println("finish");
}
(3).return语句
与continue和break不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。
e.g.
public class Test {
public static void main(String[] args) {
for(int i=0;i<10;++i) {
for(int j=0;j<10;++j){
System.out.println(j);
if(j==5)
return;// 直接结束整个函数返回结果,后续代码自然不再执行
}
}
}
}