Java:一段容易让人迷惑的代码

题外话

wordpress升级后的写文章页面更舒服了.

正题

有时候我们会遇到很多让我们迷惑的Java代码,比如下面这段就是,可以先想下其的输出结果.

1
2
3
4
5
6
7
8
9
10
11
12
public class Test{
      public static void main(String[] args) {
            StringBuffer a=new StringBuffer ("A");
            StringBuffer b=new StringBuffer ("B");
            oper(a,b);
            System.out.print(a+","+b);
        }
      static void oper(StringBuffer c,StringBuffer d){
          c.append("B");  
          d=c;
      }
}

其实上面的输出结果是:ABB.

因为c是实际添加了B,而d只是单纯的传入,与b没有任何关系.

java标志
image-2234

C++实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
using namespace std;

void replace(int &a,int b)
{
   a=20;
   b+=a;
}

int main()
{
  int a = 30;
  int b = 70;
  replace(a,b);
  cout << a << "---" << b << endl;
  return 0;
}

一个跟原来的值是有关系的,另一个跟原来的值是没有关系的.

其他的一些代码片段就懒得发了…

发表评论

您的电子邮箱地址不会被公开。

*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据