一个细枝末节:代码如下:short s=4;s=s+5;与s+=5;这两句话有什么区别呢?答:s=s+5不能通过编译,而后面那种表达形式可以。原因:short在内存中只占了2个自己,在执行s+5的时候,系统会自动把它提升为int型,而int是四个字节的,再把一个四字节的数赋值给一个2字节,这个是肯定不能通过编译,而且你还不能强制转换,如果你这样写:s=(short)s+4;编译的时候系统会报损失精度的错误。而s+=5;却能够通过编译,这个表达式它只做赋值,其内部有自动转换功能。(以后面试可能会用到)。
.两个数的相互转换,如何不用第三个变量实现。例如互换n和m,需用到一下三个表达式:n=n+m; m=n-m; n=n-m;这样就换过来了,我当时也理解了蛮久的。第一个表达式执行完之后,n的值已经变化了,但是m的值还没有变化,这时候可以用n-m得到之前n的值,把它赋值给m,此时就已经实现了m得到了n的值,接下来就是要将之前m的值赋值给n,这不就简单了嘛,用现在的n减去现在的m得到的不就是以前的m的值了嘛。同理也可以用异或运算实现,我们都知道一个数以后另一个数两次结果还是自己本身。用异或运算实现的代码如下:n=n^m;m=n^m;n=n^m;再写的详细点吧,免得自己以后也看不懂了,得到的m的值相当于:n^m^m;得到的n的值相当于:n^m^n; |