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