本文主要是介绍java简化打印_唉,因为 Java 的装逼简化炫技写法背锅了!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
点击蓝色小字关注!关注一下你就不会有bug!
避免所谓聪明的编程技巧
对于交换两个变量的内容,在 C/C++ 中存在一种这样的编程技巧:1int x = 1111;
2int y = 2;
3x^=y^=x^=y;
4cout<
这样一个简单的连续异或就能解决变量的交换问题,这种写法在很久以前是为了减少临时变量的使用,所以这种做法在现在也得到了保留。
首先看这样一个问题,表达式 x^=y,在 C/C++ 的编译器中是先计算出 y 的值,然后再获取 x 的值,最后再计算表达式。但在 Java 中的做法是先获得 x 的值,再获得 y 的值,最后再计算。Java 的语言规范描述,操作符的操作数是从左往右求值。这使得在计算 x^ =y^ =x^ =y 表达式中的第二个 x 的时候是在计算 x^ =y 之前的值( x 的值依旧是 1111),并不是 x^=y 后的值,这就导致了计算上的错误。所以在 Java 中准确的写法是:1y = ( x^=( y^=x ) )^y
思考:上面的这种写法极其容易引起错误,程序的可读性受到很大的影响,所以在写代码的时候要思考一个问题,除非编译器能确定操作数的运算顺序,不然不要让编译器去确定操作数的计算顺序,就比如这样的表达式 x=a[i]++-a[j]++,很容易导致错误。
避免使用混合运算
看如下代码:1public class DosEquis{
2 public static void main(String[] args){
3 char x = 'X';
4 int i = 0;
5 System.out.println(true ? x : 0);
6 System.out.println(false ? i : x);
7 }
8}
看似将打印 XX,但是结果却是 X88。这是一个出乎意料的结果,思考之后将可能得出这样的结论:出现这样问题的原因是操作数的类型自动提升,char=>int。但是又有一个问题就是为什么第一个运算不是 88,找其根本原因还是在于条件表达式的运算规则:1A ? B : C
2B, C为相同类型, 那么表达式的计算结果就是B, C的类型
3B, C不是相同类型的时候, 那么计算结果就按照B的类型(此时B必须是式子中最高类型).
4 此时C的类型就自动上升为式子中最高的类型, 例: false ? x : i, 输出是0, 而不是0对应的字符.
上面的规则决定了,将调用哪一个 print 的重载函数。这种条件表达式返回值,很容易受 B、C 类型影响。当根据返回值作条件判断的时候,这种性质也将导致一个严重的问题。
思考:上面的问题说明在条件表达式中,最后再后两个操作数使用相同类型的操作数,以此避免返回值类型不确定的问题,并且在其他的表达式计算中,一定要理清楚数值之间的类型转换。
点击左下角阅读原文查看历史经典技术问题汇总,看完顺手走一波PYQ呀~
这篇关于java简化打印_唉,因为 Java 的装逼简化炫技写法背锅了!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!