第一部分:必背易漏知识点:
1.变量命名规则
字、下、美、人、数、骆驼;变量名首字母小写;有意义;不能使用关键字;
2.默认类型
在java中,整型默认是int类型,浮点型默认是double类型
3.常量
在声明前加final;常量名通常大写;不同字符使用下划线分隔(驼峰命名);只能被赋值一次,通常定义时即对其初始化
4.类型转换(重点)
4.1简单数据类型之间的转换
在java中,整型、浮点型、字符型被视为简单数据类型,这些类型由低到高分别为(byte.short,char)——int——long——float——double
简单数据类型之间的转化又可以分为:低级到高级的自动类型转换、高级到低级的强制类型转换、包装类过渡类型转换
(1)自动类型转换
byte b; int i =b; long l=b; float f=b; double d=b;
char c='c'; int i =c; System.out.println("output:"+i); // "output:99
对于byte、short、char三种类型而言,它们是相同级别的,因此,不能相互自动转换,可以使用下述的强制类型转换
short i=99; char c=(char)i; System.out.println("output:"+c); // "output:c
(2)强制类型转换 口诀:长变短要强制,高变低也一样。
这种情况会导致溢出或者精度的下降
int i=99; byte b=(byte)i; char c=(char)i;
(3)包装类过渡类型转换
在进行简单数据类型之间的转换(自动转换或者强制转化)时,可以利用包装类进行中间过渡。一般情况下,首先声明一个变量,然后生成一个对应的包装类,就可以利用包装类的各种方法进行类型转换了
①:当希望把float型转换为double型时
float f1=100.00f;
Float F1= new Float(f1);
Double d1 = F1.doubleValue();
②:当希望把double类型转换为int型时
double d1 =100.00;
Double D1=new Double(d1);
int i1=D1.intValue();
4.2字符串与其他数据类型的转换
java.lang.Object类派生的类都提供了toString()方法
4.3其他实用数据类型之间的转换
第二部分:练习题
选择题:
2.1下面选项对boolean型变量的声明,请选择哪些选项是正确的?
A.boolean b1;
B.boolean b2=1;
C.boolean b3=‘true’;
D.boolean b4=false;
E.boolean b5=Boolean.false();
试题分析:布尔类型是最简单的一种数据类型,布尔型变量是用关键字boolean来定义且布尔型数据只有两个值:true和false,分别表示“真”和“假”。在Java中,布尔类型是不能转换为int型。
参考答案:AD
2.2基本数据类型与String类型之间的转换
表达式10.4+"4.2"的结果是什么?
A.返回double类型14.6
B.返回String类型“14.6”
C.返回long类型14;
D.返回String类型“10.44.2”
试题分析:当+运算符两侧的操作数的类型不一致时,需要统一类型,这时就会发生类型转换。当一个操作数为原始数据类型,另外一个为字符串时,则基本类型的操作数要转换为等价的字符串,这时“+”不再是加运算符而是连接符。
参考答案:D
2.3选出对float变量的合法声明
下面选项中表示的是对float型变量的声明,请选择哪些是正确的?
A.float fa=-586;
B.float fb=3.1415;
C.float fc=0xA4E;
D.float fd=42e1.2L;
E.float fe=52.08D;
F.float ff=5.88F;
试题分析:浮点常量默认为双精度数,如果需要指定为单精度数,需要在末尾加上F或f。
参考答案:ACF
2.4.下面那一项关于基本数据类型的描述是正确的?
A. boolean数据类型只有true和false两种取值
B. 使用long可以保存小数
C. float数据类型可以保存的数据范围比double数据范围要大
D. byte数据类型可以正常保存200这个数字
正确答案是:A
long是长整型
float浮点型
double双精度浮点型
float保存的数据范围比double数据范围要小
byte 存int值 需要强制类型转换
2.5下列表达式,正确的的是
A.byte b =128;
B.boolean flag =null;
C.float f =0.929;
D.long a =2147483648L
正确答案是:D
A中byte能表示的取值范围为[-128,127],因此不能表示128。B中boolean的取值只能是true或false,不能为null。C中0.929为double类型,需要进行数据类型转换。
问答题
2.6 java中int、 char、long各占多少字节?
4、2、8
在java中,char类型占2个字节;原因:Java编译器默认使用Unicode编码,因此2字节(16位)可以表示所有字符。java中占2个字节有short和char;而byte和boolean占1个字节,int和float占4个字节。
2.7String 是最基本的数据类型吗?
不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type),剩下的都是引用类型(reference type),枚举类型(enumeration type)也是引用类型
2.8short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?(常考题)
java语言在涉及byte、short和char类型的运算时,首先会把这些类型的变量值强制转换为int类型,然后对int类型的值进行计算,最后得到的值也是int类型。
对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。
“+=”为java语言规定的运算符,java编译器会对其进行特殊处理,因此short s1 = 1; s1 += 1;能够编译通过
2.9float f=3.4;是否正确?
不正确。在java中,整型默认是int类型,浮点型默认是double类型
3.4默认是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f=3.4F。
2.10char型数据的取值是多少?
0~65535
2.11下面程序运行结果是什么?
int i =1;
if (i) {
System.out.println("true");
} else {
System.out.println("false");
}
答案:编译错误。基本数据类型与boolean类型是不能相互转换的。if条件只接受boolean类型的值(true或者false),而i的类型为int类型不能被隐式地转换为boolean
2.12对于下述代码结果强制类型转换后,变量a和b的值分别为()
short a =128;
byte b =(byte)a;
答案:a=128,b=-128。short类型变量占两个字节,a对应的二进制为:0000,0000,1000,0000,由于byte只占一个字节,在强制转换为byte的时候只截取低字符:1000,0000,10000000是-128的补码,因此b的值为-128
2.13怎么将 byte 转换为 String?
可以使用 String 接收 byte[] 参数的构造器来进行转换,需要注意的点是要使用的正确的编码,否则会使用平台默认编码,这个编码可能跟原来的编码相同,也可能不同
2.14我们能将 int 强制转换为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象?
是的,我们可以做强制转换,但是 Java 中 int 是 32 位的,而 byte 是 8 位的,所以,如果强制转化是,int 类型的高 24 位将会被丢弃,byte 类型的范围是从 -128 到 128