1. 下面代码的输出结果是?
int i = 012;int j = 034;int k = (int)56L;int l = 078;System.out.println(i);System.out.println(j);System.out.println(k);
A. 输出12,34,56 B. int k=(int)056L;行编译错误 C. 输出10,28,46 D. int l=078;行编译错误
解析:int l = 078;行编译错误,因为078是八进制,只能选0~7的数字。
Java中声明八进制,在 赋值数字前加0,如int i=012;输出10;
声明十六进制,在赋值数字前加0x,如int i=0x12;输出18;
如十进制数字0-9;则八进制数字:0-7,但是十六机制:0-9ABCDEF(此处不一样了)
答案:D2.以下程序错误的是:
A. short s=1;s=s+1;
b. short s=1;s+=1;
解析:① short s=s+1 会出现编译错误。s+1的时候,结果会被“升格”为int类型。把int赋给short当然编译错误。
② s+=1 对于“+=”操作,系统会自动执行类型转换操作,等价于s=(short)s+1
答案: A
3.下面代码的输出结果是:
char x='x';
int i=10;
System.out.println(false ? i:x);
System.out.println(false ? 10:x);
A.120 x B.120 120
解析:a.如果第二个和第三个操作数具有相同的类型,那么它就是条件表达式的类型
b.如果一个操作数的类型是T,T表示byte,short,char类型,而另外一个操作数是int类型的常量表达式,它的值可以用类型T表示(在类型T所对应的字节范围内),那么条件表达式的结果的类型就是T。
c.如果不是a或b,则对操作类型进行二进制数字提升,而条件表达式的类型就是第二个和第三个操作数被提升之后的类型!
补充:若输出System.out.println(false ? 65536:x);则结果为120 (65535为临界值,65536为2的16次方,即2个字节,char型占两个字节。因此65536超出了char对应字节范围,则b结论不适用,对操作类型进行二进制提升,条件表达式的类型变为int)
答案:A
4.下面程序的输出结果为:
int num=32;
System.out.println(num >>32);
A.32 B.16 C.1 D.0
答案:A
解析: java中的运算过程:
x>>n 这个表达式,n并不是实际移位,要经过判断,实际移位需要根据x对应的类型所占的位数进行取模,取模后的值即为实际移位:true_n={n% [type(x)所占字节数*8]}。然后将x除以(2的true_n次方),商即为移位后的最终结果。
比如这道题中,num为int型,int型占4个字节,即4*8=32位,32%32=0(n=32对32取模之后为0),所以num向右移动0位,即不移动,num的值仍为32.
若令num=64,向右移动33位:
int num=64;
System.out.println(num >>33);
则33对32取模之后为1,实际上向右移动1位,num移位后的值为32.
若令num的类型为long,如下:
long num=645;
System.out.println(num >>65);
则输出结果为322.因为long类型是8个字节,即64位,65对64取模之后为1,即向右移位一个,num的值322.
boolen,8位1个字节
int,32位,4个字节
float,32位 4个字节
double,64位8个字节
char 16位,2个字节
byte 8位1个字节
short 16位 2个字节
long 64位 8个字节
5.静态方法不能访问非静态成员(包括方法,变量),只有实例化该类的一个对象,才能通过对象来访问该成员。
当编译和运行下列代码时会出现:
public class helloworld {
int x=2000;
public static void main(String[] args) {
System.out.println(x);
}
}
答案:编译时错误。
因为main是静态方法,x不是静态变量,因此x在内存中实际上还没有创建,只有通过实例化一个类的对象a,才能通过a.x访问。
当将上面的int x=2000改为static 2000时,才能运行成功。
或者改为:
public class helloworld {
int x=2000;
public static void main(String[] args) {
helloworld a=new helloworld(); System.out.println(a.x);
}
}
也可运行成功