刚学10节java~~又看10
c4droid吧
全部回复
仅看楼主
level 10
1421126961 楼主
刚学10节java~~又看10节视频~指针就是找不着~引用你来为啥不带地址呢~~想swap没有用~我去~~怀念typedef的简单泛型~~怀念操作符的重载~怀念最容易犯错的指针~但是好喜欢java的GUI~~但是SDL也很有爱(⑉°з°)-♡~~感觉java尽管不用担心内存~但是真的(//∇//)很不习惯没有地址传递的日子~~ 尽管~真的很喜欢java的错误处理机制~~原谅我学C/C++时候~没有用过try和throw 好吧ヽ(・_・;)ノ 结课感言完毕~明天后天一考试结束~本王要回来啦😄~~各位吧友~欢迎骚扰~(ps:本身24k纯正抠脚大汉一枚~哈哈(ಡωಡ)hiahiahia )~~觉得java类库挺丰富的~继承和接口也不错~但是~真心感觉~多态和泛型好烦人~也许~我中c/c++毒太深~~不过~假期必须用java做点什么来祭奠我这逝去的青春~~~
镇楼
图一张~假期的一本书;
2016年01月22日 13点01分 1
level 12
牛逼
2016年01月22日 13点01分 2
level 11
(ಡωಡ)hiahiahia
2016年01月24日 02点01分 4
level 13
换个行好么orz
   ——蜂蝶花间隐,伊人水旁清;犹有顽童戏,已无故人音。
2016年01月26日 03点01分 8
又不是写代码~~要排版哎,,Ծ^Ծ,,
2016年01月26日 07点01分
level 9
[滑稽]Java就偏偏不给你指针
2016年02月05日 02点02分 9
java几乎每一步都有隐藏的指针操作
2016年02月05日 04点02分
level 11
引用不行么;
听说引用是一个含指针的结构体
2016年02月05日 03点02分 10
你没办法用swap函数来达到交换两个数的操作(;≥皿≤)
2016年02月05日 04点02分
回复 1421126961 :那不是: 改变参数的值也实现不了
2016年02月05日 12点02分
@丿小夕ve 这个能~都用类的引用
2016年02月05日 12点02分
回复 1421126961 :那能读能写;swap不就能了么
2016年02月05日 12点02分
level 10
1421126961 楼主
Java数据类型中分为基本数据类型(8个)和引用数据类型(类,接口,数组),基本数据类型都是在栈上申请的,引用数据类型是在栈上申请引用,堆上申请实体的,所以可以认为栈上存放的是堆上实体的地址。
  有不少人对java中函数参数传递的过程有迷惑,其实用一句话来说就是"函数的参数传递的都是实参的副本",这点和C语言是一样的,只不过具体用起来在不同的情况下就有不同的效果了。接下来分三种情况讨论,都用常见的swap这个例子分析。
  1,传入的是基本的数据类型:
  1publicstaticvoid main(String[] args){
  2int x =100,y=200;
  3 SOP.sop(x+"----"+y);
  4 swap1(x, y);
  5 SOP.sop(x+"----"+y);
  6
  7 }
  8
  9staticvoid swap1(int a ,int b){
10int i = a;
11 a = b;
12 b = i;
13 }
  这里对传入的参数进行了互换的操作,但是因为传入的是实际参数的副本,所以并没有对原来的参数有影响,因此是达不到互换的效果的。
  2,传入的是引用类型,在函数内修改了值本身。
  1publicstaticvoid main(String[] args){
  2 String x = new String("100");
  3 String y = new String("200");
  4 SOP.sop(x+"----"+y);
  5 swap1(x, y);
  6 SOP.sop(x+"----"+y);
  7
  8
  9 }
10
11staticvoid swap1(String a ,String b){
12 a = a.replace('1','2');
13 b = b.replace('2','1');
14
15 }
  这里很多人很可能会弄错,认为会实现互换了,但是按照刚才的那个规则分析的话:传入的是引用的副本,而这里正好有个string的陷阱,那就是string本身是不会改变的,对string进行替换操作后,其实是返回了一个新的string,然后swap函数中的引用指向了那个返回来的新的string,也是引用改变了引用的对象(注意:是引用的对象改变了,而不是引用对象的值改变了)。
  3,传入的是引用类型,在函数内修改了指向对象的值。
  1publicstaticvoid main(String[] args){
  2 StringBuffer x = new StringBuffer("100");
  3 StringBuffer y = new StringBuffer("200");
  4 SOP.sop(x+"----"+y);
  5 swap1(x, y);
  6 SOP.sop(x+"----"+y);
  7
  8
  9 }
10
11staticvoid swap1(StringBuffer a ,StringBuffer b){
12 a.replace(0, 1, "2");
13 b.replace(0, 1, "1");
14
15 }
  同样,这个例子中,传入形参的是实参的副本,但是由于stringbuffer的特性是:操作后返回的是本身,而不是一个新的对象,因此,这里可以认为是改变了引用的对象的值。所以既然副本和实参都是指向同一个对象,副本指向的值改变了,那么实参指向的值当然改变了。
2016年02月05日 12点02分 11
@1421126961 原网页~
2016年02月05日 12点02分
1