1、请描述 Java 基本数据类型的 8种, 分别是什么 ?
答: byte short int long float double char boolean
1byte 2byte 4byte 8byte 4byte 8byte 2byte 2byte 1byte = 8bit
2、请观察下列代码是否存在问题, 如果有, 请说明原因并改成
byte b1 = 3; // 第一行
byte b2 = 4; // 第二行
byte b3 = b1 + b2; // 第三行
byte b = 3 + 4; // 第四行
答: 无 无 有 无
第三行b1+b2自动转int型需要强制转型回byte
byte b3 =(byte)(b1 + b2);// 第三行
3、现有代码如下, 请回答打印的结果, 并描述中间的运算过程
int num = 10;
char content = 'a';
int result = num + content;
System.out.println(result);
答:
打印结果:107
计算机底层将num转化成10的二进制,
将result转化成‘a’对应的ASCII码表对应的97的二进制,
故底层进行的运算是10+97=107
4、简述下 ++ 运算符在参与运算使用的时候, 在前在后的区别
答: ++a 先加后赋值 a++先赋值后加
5、现有代码如下, 请回答打印的结果, 并描述中间的运算过程
int a = 10;
int b = ++a;
int c = a++;
int result = b++ + ++c;
答:
b=++a,所以先加后赋值;
所以b=11,
又因为++a操作的是变量a,所以此时a=11;
c=a++;因为此时a=11,所以c=11;
result = b++ + ++c;
b++即先赋值后加,++c即先加后赋值,
所以此时result = 11+12=23。
此操作结束后b的值为12
6、描述下算数运算符中 , / 和 % 的特点
答:
/运算保留整数舍弃小数;11/5=2
%运算保留小数舍弃整数 11%5=1
7、现有代码如下, 想要运算结果是2.5 代码应该怎么改 ?
int a = 5;
int b = 2;
double c = a / b;
答: (不止一种修改方式)
方法一:
double a = 5;
int b = 2;
double c = a / b;
方法二:
int a = 5;
double b = 2;
double c = a / b;
方法三:
int a = 5;
int b = 2;
double c = 1.0*a / b;
8、现有代码如下, 请回答打印的结果, 并描述中间的运算过程
int a = 10;
double b = 12.3;
a += b;
System.out.println(a);
答: (务必说明原因)a+=b即a=a+b
类型转换:当 int 和 double 进行算术操作时,int 会被自动提升为 double。因此,a += b 实际上等同于 a = (int) (a + b)。
操作过程: a 初始值为 10,b 的值为 12.3。 表达式 a + b 中,a 被转换为 double,变为 10.0。将 10.0 和 12.3 相加,得到 22.3。 然后,结果 22.3 需要赋值回 a,而 a 是一个 int 类型。将 double 值赋给 int 类型的变量时,Java 会进行类型转换,截断小数部分,只保留整数部分。因此,22.3 被截断为 22。
赋值:截断后的值 22 被赋回到 a。
输出:当您打印 a 时,输出的是 22,因为 a 是 int 类型,不能存储小数值。
因此,关键点在于 a 是 int 类型,当使用 += 进行 double 运算时,double 值在赋值给 int 变量时会被截断,结果是 22。
9、现有代码如下, 请回答打印的结果, 并描述中间的运算过程
public static void main(String[] args) {
int x = 3;
int y = 4;
boolean result = x++ > 3 && --y < 4;
System.out.println(result);
System.out.println(x);
System.out.println(y);
}
答: (务必说明原因)
boolean result = x++ > 3 && --y < 4;
其中x++为先赋值后运算,
故x++ > 3为false,
又因为&&短路与左侧为false即整体false右侧不执行,
故result为false,x为3+1=4,y=4