写在前面:
第二篇博客啦ovo
这次的博客也是针对一些重点问题进行解释,顺便备忘~
话不多说,正文开始啦
目录
1. Java包含哪两大类数据类型?其中基本类型的每种类型的取值范围和默认值分别是多少?
2. Java在什么情况会发生整型溢出?
3. Java基本类型的包装类分别是哪些?其高频区间数据缓存范围分别是什么?
4.什么是自动装箱,什么是自动拆箱?
5. int与Integer有什么区别,它们之间的相互转化是怎样的?
6. 逻辑运算符&和&&的区别是什么?逻辑运算符&与位运算符&的区别是什么?
7. Java语言中可以采用什么语句跳出多重循环?
正文
1. Java包含哪两大类数据类型?其中基本类型的每种类型的取值范围和默认值分别是多少?
答:
java数据类型分为两种:
1.基本数据类型:简单数据类型是不能简化的、内置的数据类型、由编程语言本身定义,它表示了真实的数字、字符和整数。基本数据类型包括:整数类型4个(byte,short,int,long)浮点类型2个(float,double)字符型1个(char)以及布尔型1个(boolean),共计4+2+1+1=8个。
2.引用数据类型:Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。总结:引用数据类型有3种,是类、接口和数组。
数据类型 | 占几个字节(占几位) | 最小值 | 最大值 | 默认值 | 举例 |
byte | 1(占1*8=8位) | -128(负的2的7次方) | 127(2的7次方减1) | 0 | byte a=4; |
short | 2(占2*8=16位) | -32768(负的2的15次方) | 32767(2的15次方减1) | 0 | short b=288; |
int | 4(占4*8=32位) | -2147483648(负的2的31次方) | 2147483647(2的31次方减1) | 0 | int c=54; |
long | 8(占8*8=64位) | 负的2的63次方 | 2的63次方减1 | 0L | long d=3000L; |
float(单精度) | 4(占4*8=32位) | 负的2的128次方 | 2的128次方减1 | 0.0f | float f=1.7f; |
double(双精度) | 8(占8*8=64位) | 负的2的1024次方 | 2的1024次方减1 | 0.0d | double e=7.89; |
char | 2(占2*8=16位) | - | - | 'u0000' | char f='f'; |
忘记了还有一个boolean,是2字节16位的,默认值是false。注意,不可以把boolean类型作为赋值语句给int或其他类型,这与c语言是不一样的。
2. Java在什么情况会发生整型溢出?
答:
如果你仔细学习了上面的表格,你应该很容易做出解答。但是,这里依然会给出答案:
当赋值超过整形的最大值的时候(这个值是多少?请尝试在不看表格的情况下独立解答)就会发生整型溢出。举例:有语句int OverFlow=200000000000000000000;那么如果尝试输出(OverFlow+1),就会发生整型溢出。
3. Java基本类型的包装类分别是哪些?其高频区间数据缓存范围分别是什么?
答:
Java中的8个包装类分别是:Byte,Short,Integer,Long,Float,Double,Character,Boolean
对应的高频区间为:
Byte:-128~127
Short:-128~127
Character:0~127
Long:-128~127
Integer:-128~127
至于double和float,则没有缓存区间,切记。
如果所使用的包装类的值在这个缓存区间内,就会直接复用已有对象,在缓存区间之外的数值会重新在堆上产生。
我们知道,Java中判断两个数是否相等,如果使用Integer类型,实际上判断的是两个对象的地址是否相等。如果在高频区间内,由于直接复用已有对象,自然地址值相同,将返回True;否则,在堆上产生的时候,两个数值相同的变量将分配在两个不同的地址上,根据判断规则,将返回False。
4.什么是自动装箱,什么是自动拆箱?
答:
自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。
5. int与Integer有什么区别,它们之间的相互转化是怎样的?
答:
1.Integer是int的包装类;int是基本数据类型;
2.Integer变量必须实例化后才能使用;int变量不需要;
3.Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;
4.Integer的默认值是null;int的默认值是0。
6. 逻辑运算符&和&&的区别是什么?逻辑运算符&与位运算符&的区别是什么?
答:
“&”和“|”在执行操作时,运算符左右两边的表达式首先被运算执行,再对两表达式的结果进行与、或运算。
而利用“&&”和“||”执行操作时,如果从左边的表达式中得到操作数能确定运算结果,则不再对右边的表达式进行运算。
采用“&&”和“||”具有“短路”效应,目的是为了加快运算速度。
举个例子来看看:
boolean a=false;
int b=10;
if(a==true&&(b+=10)==20)a=true;
此时如果输出b,得到结果为10,而不是20。原因是,采用&&,则具有短路效应,左面的式子中,a为false,不为true,所以a==true的结果是假,又因为短路效应,所以右面的式子不执行,因此b=10。
注意,当&两侧的对象不同的时候,将具有不同的含义。如果都是Boolean,则进行逻辑与;如果都是数值,进行按位与;否则就会报错。请再次注意Java中不能将数值类型和布尔类型相互赋值。
7. Java语言中可以采用什么语句跳出多重循环?
答:
可以采用例如break lab的语句。注意,这里的lab需要事先声明。
总结:break lab可以跳出多重循环的外层循环