java谜题--1
解惑1:
大佬你可能会觉得输出为:number:101
But not
执行结果如下:
启示:
不要在常量与变量中出现易混淆的字母,常量全部大写并用下滑线分割,变量采用小驼峰命名法命名。
解惑2
大佬你可能会觉得输出为:true,因为 都是90,所以相等。
But not
执行结果如下:
启示:
对于三元运算符有以下特性:
当你使用三元运算符,两边的操作数的类型不一致的时候,这就涉及到三元操作符的转换规则:?
1.若果两个操作数不可转换,则不做转换,返回值为Object类型。?
2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换。int类型转换为long类型,long类型转换成float类型。?
3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型为T,那么,若数字S在T的范围内,则转换为T类型;若S超过了T的范围,则T转换为S类型。?
4.若两个操作数字都是直接数字。则返回值类型为范围较大者。?
保证三元操作符中的两个操作类型一致,即可减少错误的发生。
解惑3:
大佬可能觉得会出:10
But no
执行结果如下:
启示:
警惕自增的陷阱;
解惑4:
大佬你觉得为什么 b4 那句会出现错误!!!
正确答案:
因为’A’ 不属于对象。而instanceof 只能用于对象的判断,不能用于基本类型的判断。
大佬你觉得b1,b2,b3,b5,b6是true还是false;
正确答案:
True,true,false,false,false;
启示:
A: ‘A’ instanceof Character instanceof 只能用于对象的判断,不能用于基本类型的判断。
B: null instanceof String 语言特性,左边是null 结果直接为false;
C: null instanceof String instanceof 的左右操作数必须具有实现或继承关系,否则编译失败
解惑5;
大佬你觉得这个判断奇偶数的方法是否存在问题?
请看如下情况:
显然对于负数奇数是无效的,
那如何改进
我的方法如下(用偶判断,不用奇判断):
解惑6:
大佬你觉得结果是: 0.40 吗?
But not
执行结果如下:
启示:
计算中浮点数有可能是不精确的,它只能无限接近准确值,而不能完全准确。
对于精确的值,最好用int ,long的整形变量。
解惑7:
大佬可能认为结果为:10.5的近似值为11,-10.5的近似值为-11;
But not
执行结果如下:
解惑8:
大佬你可能会觉的输出结果为 true,false,false
But no
执行结果如下:
启示:
对于基本类型的封装类,equal()是比较内容是否相同,
compareTo()比较的是对象的大小。基本类型的对象不存在==,>=,<=的比较,
提示,对于String类的对象,equal()是比较内容是否相同,==是比较对象是否相同。
对于其他类的对象而言,equal()是比较对象是否相同。
解惑9:
这个正确,没问题。
对于下面这道题。
是不能编译吗?
But not
执行结果如下:
启示:
静态变量是类加载时就已经分配到数据区,它在内存中只是一个拷贝,不会被分配多次,其后所有赋值操作都是值的改变,地址则保持不变,我们知道jvm初始化变量是先声明空间,然后在赋值的,如果多个静态快对静态快继续赋值, I 当然还是等于1了,谁的位置靠后,谁就有追中的解释权。
解惑10:
父类:
子类:
测试类:
大佬你可能会觉得当然是全部输出子类方法里的语句啦。
But not
执行结果如下:
启示:
静态方法不能被重写,但能够被隐藏。
静态方法的特殊性,静态方法不依赖与任何一个其实例对象,它是通过类名访问的,其次,可以通过对象实例访问静态方法,jvm会通过对象的表面类型查找静态方法的入口,继而执行(表面类型是声明类型,实际类型是对象产生时的类型)
疑点问答:
A:
大佬问:为啥println方法打印一个对象会调用toString方法呢,那是源于pringtln的实现机制,如果是一个原始类型就直接打印,如果是对象类型,就打印toString()方法的返回值。
B:
大佬问:为啥在项目中总会出现package-info的类
Package-info是不能声明此类的,它是描述和记录本包信息的,提供包的整体注释说明。
分享(share )是快乐的,也是见证个人的成长历程,文章主要为平时学习积累,基于自身认知不足之处在所难免,也恳请大家指正,共同进步