常见Java基础类型题目分析


   

第一题是关于基本的算法知识,这个很有必要去掌握以下,在学校也经常听老师们说找工作比试面试会出一些这方面的知识,我拿到的第一题是关于排序的,虽然很简单,但是我还是要提醒一下基础不太好的同学去学习一下。算法是编程的核心、也是灵魂,它的重要性就不需要我去多说了,我需要提示的就是要去坚持学习算法,因为算法是属于内功(扯得有点多)。

第二题是关于斐波那契数列的,这个也很基础,主要是考察你对数据之间的分析能力,以及对递归的了解。相信中学时可定遇到过关于数列的各种z知识,对数据之间规律也有一定的洞察能力,所以我不觉得这个题会是大家的难题(数学是算法的根本啊)。

第三题是关于类型转化的一些基本知识分析:下代码哪个是正确的?为什么?

a. byte b = 1 + 1;     
b. byte b = 1; b = b + 1; 
c. byte b = 1; b = b += 1;    
d. byte b = 1; b = ++b; 

a.相信大家都没有什么问题(当然如果不了解类型转化的话是有问题的,虽然没有编译运行都没问题,但是下面的题就会出现不知所措的情况)。

b.相信大家以及发现问题了,编译是通过不过的。因为你试图将int型变量赋值给byte型变量。这样会造成精度的丢失,所以会编译失败(编译失败对程序员来说是一件很好的事)。说说原因吧,在进行b+1操作时编译器会自动检测到byte类型与int类型,这时会自动向上转型,也就是经过b+1之后的结果已经不再是byte类型了,而变量b是byte类型,你试图将int类型赋值给byte自然会编译失败,如果想通过编译,可以将int型变量强制转化为byte型,这时会丢失精度。如下:

byte b = 1; 
b = (byte)(b + 1);

c.你会发现编译运行都没有问题,但是重要是的是你是否明白为什么可以通过编译与运行。首先可以将语句分解为一下语句:

byte b = 1; 
b += 1;
b =b;

观察到第二条语句与b题的语句很像,但是b编译失败而c通过。原因在于在执行+=操作之前会将运算符左边的变量类型转化为右边的变量类型,而右边b+1在b题也说明了,b+1的结果是int型值,所以c中b的类型自动转化为了int型。所以编译是没有问题的。

d.根据c的分析我们可以将语句分解为:

byte b = 1; 
++b;
b=b;

而第二句可以转化为b+=1.通过c的分析,你就会明白d的原理了。

总结:

1、通过上文的简单分析你应该得出如下结论

a:基本数据类型进行四则运算时,运算结果与较高级别的数据类型进行自动提升;
b:++、+=时首先会将运算符右边的数据类型强制转化为与运算符左边相同的类型,并且最后结果与运算符左边的保持一致

2、应该具有程序分析的规律(或者调试程序的规律),将问题分解,找与其等价的式子;将要调试的部分与其他部分进行隔离,也就是降低其他因素的干扰。

3、培养深究原理的习惯,这会促使你很快的成长。











发布了10 篇原创文章 · 获赞 6 · 访问量 1450

猜你喜欢

转载自blog.csdn.net/yueyazhishang/article/details/39429673