A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 广驰 中级黑马   /  2012-9-10 16:57  /  2070 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 应广驰 于 2012-9-11 10:26 编辑

我在用IO流输出的时候,调用了两个不同的方法,先是调用了空参数的read()方法

  1.                 FileReader fr = new FileReader("123.txt");
  2.                 FileWriter fw = new FileWriter("D:\\java.txt");

  3.                 int i;
  4.                 while((i = fr.read())!=-1)
  5.                 {
  6.                         fw.write((char)i);
  7.                         fw.flush();
  8.                 }
  9.                
复制代码
然后调用了参数为数组的read(char[] cbuf)
  1.   char[] ch = new char[1024];
  2.                 while((i = fr.read(ch))!=-1)
  3.                 {
  4.                         System.out.println("指针");
  5.                         fw.write(ch);
  6.                 }
  7.                
  8.                 fw.close();
  9.                 fr.close();
复制代码
第二个方法中输出语句没有执行,那应该就是说read()方法读完后,read(char[] cbuf) 判断返回值就直接为-1了, 如果用指针倒是好解释,所有的read()方法都公用一个指针。
在大学学习java的时候老师就说过java是没有指针的,那这样的话,read (char[] cbuf)是怎么样去实现和read ()方法同步读取位置的

java在底层中是真的不用指针而用了其他机制,还是说有指针,但是指针被底层封装了,只有系统定义好的函数能够使用,而他又是怎么实现使用的,希望有对这方面了解的解释一下

4 个回复

倒序浏览
本帖最后由 孙沛 于 2012-9-10 21:09 编辑

java中其实是有指针的,只是不是显式的Java是一个纯面向对象的语言,基本上来说,程序员不需要关心内存的分配与释放的操作(jre、虚拟机帮忙做了),既然不关心内存那么没必要引入指针这么种相对复杂而容易重大错误的一种形式。Java是面向对象的,从某种角度说,引用就是指针的简化版
回复 使用道具 举报
没人解答一下么,楼上的兄弟,还没整理好么
回复 使用道具 举报
其实java的引用的本质就是指针的,楼主如果学习过c语言的话,就知道malloc函数吧,A a =  new A();的本质就是(A*)malloc(sizeof(A));
当java中的引用a调用它的方法和属性的时候,比如a.i();或者a.f();就相当于c语言中的(*a).i和(*a).f();这样做的好处我认为一是便于书写,符合java强类型语言的特点,另外就是便于内存管理,不需要程序员手动释放内存,交给jdk垃圾回收机制回收
回复 使用道具 举报
  1.   char[] ch = new char[1024];
  2.                 while((i = fr.read(ch))!=-1)
  3.                 {
  4.                         System.out.println("指针");
  5.                         fw.write(ch, 0, i);
  6.                         fw.flush();
  7.                 }
  8.                
  9.                 fw.close();
  10.                 fr.close();
复制代码
这是正确的代码.
我想说,你这里的"指针"和c++中真正意义上的指针根本是两码事儿.你这里的"指针"这是文件的指针,说白了就是文件的读取或写入位置罢了,你不要一听到文件指针就把和c++中的指针联系到一起了,你这样只是证明了你要么没有学c++,要么没学懂c++指针是怎么回事儿.
我这么跟你说吧,c++中的指针,其实和java的引用类似,只不过java的引用是类型安全的,绝对不会让系统崩溃,出现蓝屏的情况发生.java的引用,确实像c++中的指针那样,指向对象在内存中的地址,但又比c++简单,安全多了.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马