1. &和&&的区别
按位与:ao&ba是把ao和ba都转换成二进制数然后再进行与的运算;
逻辑与:ao&&ba就是当且仅当两个操作数均为 true时,其结果才为 true,只要有一个为false,a&&b就为false。
&&进行的是短路判断,即如果左侧的表达式的结果为false,整个的结果就为false,不再计算右侧的表达式的值。
2. 八种基本数据类型的大小,以及他们的封装类
注:
3. switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?
基本类型或 Integer 包装类型,由于, byte,short,char 都可以隐含转换为 int,所以,这些类型以及这些类型
的包装类型也是可以的。显然, long 和 String 类型都不符合 switch 的语法规定,并且不能被隐式转换成 int
类型,所以,它们不能作用于 swtich 语句中。 另外由于 JDK1.7 中引入新特性,所以 swtich 语句可以接收
一个 String 类型的值, String 可以作用在 swtich 上。
switch只能时int 或这能转化为int型的byte,short,char,jdk1.7之后String也可以。
4. short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
首先得清楚Java的基本数据类型转换规则:大的数据类型转换为小的数据类型需要强制转换,反之可以自动转换。赋值表达式等号两侧的转换的规则是右侧的向左侧的看齐,即右侧表达式要转换到和左边的类型一样。
short s1 = 1; s1 = s1 + 1;
是错误的,s1 + 1,s1是short类型,1是int型,s1会自动转换为int型的1,与1相加后,得到int型的2,要向左侧的short类型的s1看齐,即需要通过强制类型转换。正确写法:s1 = (short) (s1 + 1);
short s1 = 1; s1 += 1;
由于 += 是 java 语言规定的运算符,java 编译器会对它进行特殊处理,因此可以正确编译
5. char 型变量中能不能存贮一个中文汉字?为什么?
6. 使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
final关键字的作用
修饰类:不能被继承
修饰变量:引用的指向不能发生改变,引用指向的对象内容是可以发生改变的
修饰方法:不能被重写
7. "=="和 equals 方法究竟有什么区别?
== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。