java面试题和答案总结

本文深入探讨了Java编程中的几个关键概念和技术,包括数值类型转换、位运算、静态方法使用限制等,通过具体示例帮助读者理解这些核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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(此处不一样了)

答案:D

2.以下程序错误的是:

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);
       }

}
也可运行成功
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值