1.题目:
byte
b1=
1
,b2=
2
,b3,b6;
final
byte
b4=
4
,b5=
6
;
b6=b4+b5;
b3=(b1+b2); ----编译不通过,要强转为byte b3=(byte)(b1+b2)
System.out.println(b3+b6);
表达式的数据类型自动提升, 关于类型的自动提升,注意下面的规则。
①所有的byte,short,char型的值将被提升为int型;
②如果有一个操作数是long型,计算结果是long型;
③如果有一个操作数是float型,计算结果是float型;
④如果有一个操作数是double型,计算结果是double型;
而声明为 final的变量会被JVM优化,第6行相当于 b6 = 10
2.题目:
class A {}
class B extends A {}
class C extends A {}
class D extends B {}
Which four statements are true ?
A C D G
A.The type List<A>is assignable to List.
B.The type List<B>is assignable to List<A>.
C.The type List<Object>is assignable to List<?>.
D.The type List<D>is assignable to List<?extends B>.
E.The type List<?extends A>is assignable to List<A>.
F.The type List<Object>is assignable to any List reference.
G.The type List<?extends B>is assignable to List<?extends A>.
大概的观点就是:java数组具有协变性,而java集合不是协变的;
什么意思呢?我举几个例子:
1. 假设有一个函数 fun(Animal animal),如果我们传入一个Dog d 对象进去,编译器是不会报错的,这是多态的概念;
2. 假设有一个函数 fun(Animal[] animals),如果我们传如一个Dog[] dogs数组进去,编译器也不会报错,这就是数组的协变性;
3. 假设有一个函数 fun(List
那么该怎么办呢?我们可以将泛型改成这样 fun (List <? extends Animal> ),这样之后,当我们再 传入一个List
3.题目: