1 、 short s1 = 1; s1 = s1 + 1; 有什么错 ? short s1 = 1; s1 +=1; 有什么错 ?


答案:对于 short s1 = 1; s1 = s1 + 1; 来说,在进行 s1 + 1 运算时会自动提升表达式的类型为


int ,那么将 int 类型赋值给 short 类型的变量 s1 会出现类型转换错误。 对于short s1=1;s1+=1 来说, += 是 java 语言规定的运算符, java 编译器会对它进行特殊处理,因 此可以正确编译。


2 、 char 类型变量能不能储存一个中文的汉字,为什么?


答案: 32 / 44char 类型变量使用的是 Unicode 编码的字符, Unicode 字符集包含了汉字,所以 char 类型当然可以存 储汉字,还有一种特殊情况就是某个生僻字没有包含在unicode 编码字符集中,那么就 char 类型就不能 存储该生僻字。


3 、 Integer 和 int 的区别


答案:


int 是 java 的 8 种内置的原始数据类型。 Java 为每个原始类型都提供了一个封装类, Integer 就是 int


的封装类。 int变量的默认值为 0 , Integer 变量的默认值为 null ,这一点说明 Integer 可以区分出未赋值和值为 0 的区别,比如说一名学生没来参加考试,另一名学生参加考试全答错了,那么第一名考生的成绩应该是 null,第二名考生的成绩应该是0 分。关于这一点 Integer 应用很大的。 Integer 类内提供了一些关于 整数操作的一些方法,例如上文用到的表示整数的最大值和最小值。


4 、 switch 语句能否作用在 byte 上,能否作用在 long 上,能否作用在 String 上?


答案:


byte 的存储范围小于 int ,可以向 int 类型进行隐式转换,所以 switch 可以作用在 byte 上


long的存储范围大于 int ,不能向 int 进行隐式转换,只能强制转换,所以 switch 不可以作用在 long 上


String 在 1.7 版本之前不可以, 1.7 版本之后 switch 就可以作用在 string 上了


5 、基本数据类型和引用数据类型的区别?


答案:


( 1 )基本类型保存的是值,引用类型保存的是对象的地址,所有基本类型赋值是按值传递(拷贝赋 值),引用类型赋值是按引用传递。


( 2 )基本数据类型是存放在栈中的简单数据段。


( 3 )引用数据类型是存放在堆内存中的对象,在栈内存中存放的是堆内存中具体内容的引用地址, 通过这个地址可以快速查找到对象。


6 、 .64 位的 JVM 当中, int 的长度是多少?


答案: Java 中, int 类型变量的长度是一个固定值,与平台无关,都是 32 位。意思就是说,在 32


位 和 64 位 的 Java 虚拟机中, int 类型的长度是相同的 4 字节。


7 、可以将 int 强转为 byte 类型么?会产生什么问题?


答案:可以做强制转换,但是 Java 中 int 是 32 位的而 byte 是 8 位的,所以 , 如果强制转化 int 类型的高


24 位将会被丢弃, byte 类型的范围是从 -128 到 128


8 、判断输出结果


public static void say() { 
 
System.out.println(3 - 2.6 == 0.4); 
 
}


答案: false ->int 类型和 float 类型做运算会损失精度所以不等,可以 System.out.println(3 -


2.6 ) 输出结果并不等于 0.4


9 、 java 中 float f = 3.4; 是否正确?


答案:不正确,因为 3.4 是双精度类型属于 double 类型,而 double 类型范围大于 float 类型,如果想要


赋给 float 类型必须强制转 换: float f= ( float ) 3.4 或者 float f=3.4F


byte->short->int->long->float->double ( 范围从小到大 )


10 、输出结果?


byte a = 127;


a+=5;


System.out.println(a);


答案: 124 。首先 byte 取值范围 -128~127 当 a+=1 时此时已经是超过了 byte 的临界值此时输出的


为 -128 、 a+=2 时输出 为 -127 ,以此类推 a+=5 时输出为 -124 ,只要记住这个技巧对于这个面试题就


可以应对了。


11 、为什么 long l=2000000000 可以,而 long l=3000000000 却编译报错


答案:因为在 Java 中二十亿和三十亿的默认类型都是 int 类型的,而二十亿是在 int 范围类的,三十亿不 在int 范围内,所以后面的 long l=300000000 会编译报错。解决方法:在三十亿后面加上一个大写或 者小写的L


12 、为什么 int a = 09 ;会报错


答案:因为在进制表示中 0 开头的表示八进制,而八进制中不能出现大于 7 的数!


13 、 int i = 3000000000; 编译能通过吗?原因是什么?(面试题)


答案:不能通过,因为三十亿在 Java 中的默认数据类型为 int ,而三十亿不在 int 能够表示的范围内,所 以不能编译通过


14 、输出结果?


int a=10;


double b=3.4;


System.out.println(a>b?a:b);


System.out.println(a);


// 输出: 10.0 10


15 、输出结果?


int a=128;


byte b=(byte)a;


System.out.println(b);// 输出 -128 ,出现了数据溢出


double c=1.23;


int d=(int)c;


System.out.println(d);// 输出 1 ,精度丢失


16 、输出结果?


运算时,运算结果会向较大的类型转换


int a=3;


double b=4;


System.out.println(a+b);// 输出 7.0


17 、为什么 byte b=10b 会报错?


答案: byte 在 java 中表示字节,而 b 表示的是 bit