黑马程序员技术交流社区

标题: 关于视频中老师说数组在内存中的地址的一点猜想,请进... [打印本页]

作者: 张明    时间: 2012-8-15 21:47
标题: 关于视频中老师说数组在内存中的地址的一点猜想,请进...

大家请看,本人在学校学过C,对于指针这个问题曾经追过老师好几天。
好像说java是没有指针的,但是从我简单的数组定义输出的结果来看,内存的地址是可以取到的,那么这样与C的区别就是没有一个专用的变量来储存地址型变量(我目前不知道java有没有这变量),用来指向内存地址。
这样的话,通过一些方法,是不是可以自己通过技术来实现java指针呢?
学习C,指针我个人觉得还是挺好用的,也知道这个东西也有一定的危险性,如果java中也能对内存直接操作,有些时候也是非常方便的啊
大家也来猜想猜想
作者: 牛杨    时间: 2012-8-15 23:09
首先 java中只有 引用。而没有指针这一说。
但是你可以把引用理解为C中经过改进的的安全的指针。
是不是可以自己通过技术来实现java指针呢?
其实 自定义一个类 然后定义这个类的引用指向这个类的对象实例,这个引用 就相当于c中定义了指针一样。你也可以打印这个引用。所以可以像这样用一个专用的变量来储存特定的地址型变量,用来指向特定的内存地址。
只不过 在java中你不可能拿着引用去进行各种各样的运算,在C中可以进行指针的运算。这一点都保证了java中的引用是安全的。也即java中 引用其实就是指针,只是取消了指针运算
所以 在java中不可能对内存进行直接操作。
作者: 张明    时间: 2012-8-16 00:00
牛杨 发表于 2012-8-15 23:09
首先 java中只有 引用。而没有指针这一说。
但是你可以把引用理解为C中经过改进的的安全的指针。
是不是可 ...


谢谢您的回复。
如果按照您所说的,可以使用一个专用的变量来存储地址型变量,用来指向特定的内存地址,那么
例:1 2 3 4 5 6 7 8 9 10 11          内存1-9已经使用,新定义的数组肯定是从9以后
      a b c d e  f g h  i
1.定义一个您说的变量,指向内存1
2.新定义一个足够长数组x[],此数组头地址肯定是9以后任意
3.x头地址可以指向第一步定义的变量指向1的地址
例:视频中老师曾举例
int[] x=new int[3];//视频源代码
int[] y=x;//基础视频第三天-17 30:18
4.那么x[0],x[1],x[2].......就应该对应为了abcdefg......
5.何以谈安全?
作者: 牛杨    时间: 2012-8-16 01:34
本帖最后由 牛杨 于 2012-8-16 01:38 编辑
张明 发表于 2012-8-16 00:00
谢谢您的回复。
如果按照您所说的,可以使用一个专用的变量来存储地址型变量,用来指向特定的内存地址, ...

你这里说的是 引用相互指向的问题,和安全问题没什么关系。
我说的安全问题是比如
在C中定义了一个指针,你可以运算这个指针,移动这个指针,(如果你移动错误)因而可能会修改到其他程序所使用的内存甚至是系统内存中的内容。从而造成系统崩溃。 这个才称之为 安全问题。
而你
int[] x=new int[3];//视频源代码
int[] y=x;//基础视频第三天-17 30:18
这个只是引用之间的相互指向,并不能像C中的指针一样可以自由地在内存中移动想指向哪里就指向哪里。你是可以控制这个引用的,并明确地知道引用指向了哪里。即使你把引用使用错了(这种一般性的小错误,不能称之为安全问题哦。如果这样都是安全问题的话,那微软 Intel这样的公司早都完蛋了),也不可能造成系统级的错误,也就不会造成太大的麻烦。


作者: 张明    时间: 2012-8-16 09:48
牛杨 发表于 2012-8-16 01:34
你这里说的是 引用相互指向的问题,和安全问题没什么关系。
我说的安全问题是比如
在C中定义了一个指针, ...

系统的错误那是不至于,我说的安全只是内存中信息的安全,这种方法我个人总是觉得电脑内存中的信息随时都能被拿出来一样,你也应该知道,内存即使掉电了信息也在,只会被覆盖,并不会清除
作者: 牛杨    时间: 2012-8-16 10:15
张明 发表于 2012-8-16 09:48
系统的错误那是不至于,我说的安全只是内存中信息的安全,这种方法我个人总是觉得电脑内存中的信息随时都 ...

这种方法我个人总是觉得电脑内存中的信息随时都能被拿出来一样。
你说的这种 情况在C 中时有可能的。但是在java中时肯定不会出现这种情况的。因为java中的引用不能进行运算,只能同种引用之间相互指向。也就是说,java中的引用不像C中的指针那样不可控制的。
还有就是内存掉电以后 ,内存中的信息就没有了,确切地说就是这些信息不可用了。硬盘里面的信息才是可以永久保存的,即便是掉电。
作者: 张明    时间: 2012-8-16 10:41
本帖最后由 张明 于 2012-8-16 10:43 编辑
牛杨 发表于 2012-8-16 10:15
这种方法我个人总是觉得电脑内存中的信息随时都能被拿出来一样。
你说的这种 情况在C 中时有可能的。但是 ...


恩,稍稍明白了一点
硬盘删除了文件,硬盘的那块区域还是这个文件,只不过不能使用了,但是是可以通过专用的软件恢复的,除非你新的文件覆盖了这块区域,那这个就才是真正的永久删除了
内存也是一个道理,不是没有了,是存在而不用了,内存的电平掉电后不会复位的,不会全部归0或归1,你计算机重启,通过技术手段,仍然能从内存中调用到你重启前内存中的信息
作者: 牛杨    时间: 2012-8-16 12:18
张明 发表于 2012-8-16 10:41
恩,稍稍明白了一点
硬盘删除了文件,硬盘的那块区域还是这个文件,只不过不能使用了,但是是可以通过专 ...

呵呵呵呵 受教了 , 以前就知道硬盘的信息只要没被覆盖,可以恢复。但是不知道内存也可以。真的是这样吗? 好像是头一次听说哦。  我回去再问问我微机原理 老师吧。  那个电平 如果说
0v代表 0(二进制0);
1v代表 1(二进制1);
如果掉电了 岂不是所有电平都恢复成 0v了么,怎么还会有 1v的电平,怎么还会能够表示二进制1呢?
作者: 张明    时间: 2012-8-16 12:49
牛杨 发表于 2012-8-16 12:18
呵呵呵呵 受教了 , 以前就知道硬盘的信息只要没被覆盖,可以恢复。但是不知道内存也可以。真的是这样吗 ...

呵呵呵,这个就和你的U盘一样,没插上USB的时候你能说U盘里的信息都掉了吗?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2