说明:其中内容摘自:《Java程序员面试宝典》,这里仅供学习使用。
1. Java提供了哪些基本数据类型?
8中基本数据类型:
Java同时提供了这些基本类型的封装类(Character,Boolean,Byte,Short,Integer,Long,Float,Double),基本数据类型是值传递的,引用数据类型是引用传递的。
2. 什么是不可变类?
不可变类是指创建了这个类的实例之后,就不允许修改它的值,也就是说,一个对象一旦被创建,在其整个声明周期中,它的成员变量就不能被修改 了。在Java类库中,所有基本类型的包装类都是不可变类(上述的8种),此外String类型也是不可变类。
3. 值传递和引用传递有哪些区别?
- 值传递中,实参会把它的值传递给形参,形参会用实参的值初始化一个临时的存储空间,因此形参和实参虽然有着不同的值,但有着不同的存储单元,因此此时改变形参的值不会影响实参的值。
- 引用传递中,传递的对象为对象的引用(地址),这时形参和实参都指向一块相同的存储空间,因此,这时改变形参会直接影响实参的值。基本数据类型是值传递的,其他数据类型都是引用传递的。
4. 不同数据类型的转换有哪些规则?
当参与运算的两个变量的数据类型不同时,需要进行隐式的数据类型转换:从低精度到高精度进行转换,即:
byte < short < int < long < float < double。
需要注意的几点:
- char类型的数据转换为高级类型(int,long等),会转换为其对应的ASCII码。
- 使用+=时,不会产生类型转换。
- boolean与其他数据类型无法转换
强制类型转换:当从高精度的转换为低精度的数据类型时。
5. 强制类型转换时有哪些注意事项?
当涉及byte,short和char类型的运算时,Java会将这些数据类型强制转换为int类型进行运算,返回的结果也是int类型,例如两个byte类型相加,得到的结果为int类型,两个short运算,结果也是int类型,所以如下的代码编译时会报错:
short s1 = 1;
s1 = s1 + 1;
(short) <- (int)
如果想得到相应的类型,需要显式的转换:
short s1 = 1;
s1 = (short) s1 + 1;
但如果使用+=运算符,则无需显示的转换,可以正确的编译,+=内置运算符计算式可自动变换数据类型。(short)
6. 运算符的优先级?
7. Math类中的round,ceil和floor方法的功能是什么?
- round:四舍五入
- ceil(天花板):向上取整,正数,小数入,负数,小数舍
- floor(地板):向下取整,正数,小数舍,负数,小数入
8. ++i与i++的区别?
- 前置(++i),运算符在前。程序开始执行前递增。
- 后置(i++),运算符在后。程序执行后递增。
9. 如何实现无符号数的右移操作?
10. char类型中是否可以存放一个中文汉字?
Java中默认使用Unicode编码,每个字符占用两个字节,因此char类型可以存放一个中文汉字。String采用了一个更加灵活的方式,英文占用一个字符,中文占用两个字符,这样可以减少所需的空间,提高存储效率。