当前位置:网站首页 > Java基础 > 正文

java切换基础位置



变量交换看似很简单,稍有基础的人见到这个问题可能马上就潇洒地给出了以下代码:

 

然而结果却是

 

这可能是初学者未经仔细思考后给出的结果,如果你也犯了这样的错误,你可能需要仔细反思一下。导致这样结果的原因是形参的改变是没法作用于实参java切换基础位置的,学习过C/C++的同学可能知道这种交换可以用指针的效果来实现,在Java中则可以通过引用来修改成员变量。代码如下:

 

结果是:

 

交换成功,这个交换就是将要交换的两个值赋值给引用对象的成员,然后交换这两个成员的引用即可。然而,有些刁钻的面试题可能不允许借助于临时变量。这时候,可以通过相加的方式来实现交换,代码如下:

 

这种“相加”方式可能不好理解,需要读者自己去仔细想一想,甚至可以背下来,这样下次提起“变量交换”这个话题就立马想起“相加”。但是这种方式交换变量还存在一个问题:数据的溢出。比如val.i =(0b0000000000);val.j=(0b0);结果是,这超过了int数据的最大值,发生溢出,其二进制表示为0b0,这实际是个负数(-),但是这个数据的二进制表示再与val.j相减之后得到的却是正数,这却是期望的结果。所以尽管发生了溢出,但巧合的是最后我们仍然得到了期望的结果。但是归根结底这种方式是不值得提倡的。最后有一种相对完美的方案:对变量做异或运算。

异或运算的一个特性是一个变量i异或另外一个变量j两次之后得到的结果仍然是i,即

 

对上面的代码进行修改:

 

这种方式不好理解,却是优于前两种方式的方案。这里需要仔细思考一下实现的过程,异或运算在其他方面也有很多的应用。如果在面试时候能提出这样的思路,相信面试官也会对你高看一眼的。

版权声明


相关文章:

  • 有c语音基础学java2025-04-24 21:10:05
  • java语言程序设计基础篇 编程题2025-04-24 21:10:05
  • java基础和c 区别2025-04-24 21:10:05
  • java基础软件研发2025-04-24 21:10:05
  • java 基础详解 pdf2025-04-24 21:10:05
  • java基础等级考试2025-04-24 21:10:05
  • java程序基础书籍2025-04-24 21:10:05
  • java语言特性基础2025-04-24 21:10:05
  • python基础学java2025-04-24 21:10:05
  • java基础录音2025-04-24 21:10:05