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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 何超 于 2013-11-29 16:53 编辑

java中 引用,引用对象,普通对象,地址值,哈希值 这几个之间的关系到底怎么样的,求详细解释。
如 int a=1;   a是什么?引用?还是对象?如果是引用那么引用对象又是谁
    String  str=new String("str");呢  str是对象,那引用又是什么,引用对象又是什么
哈希值是不是就指代的对象的地址?引用指向地址还是对象指向地址。

麻烦详细条理的解释下,万分感谢!

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1 加油

查看全部评分

4 个回复

正序浏览
本帖最后由 摄影勾魂 于 2013-11-29 13:30 编辑

1.首先分清楚简单数据类型(整型、浮点型、字符型和布尔型)和引用数据类型(类、接口、数组、枚举)。
2.Java是强类型语言,每一个变量都有所属的类型。变量就分:简单类型变量和引用类型变量。
一个类中的非静态成员变量都是存在栈内存中的。每个变量在内存中都有自己的存储地址,如果是简单类型变量,那么会直接把数据存在该地址下;如果是引用类型变量,该变量是指向一个对象的,一个对象内容很多的,对象的真实地址在堆内存,而引用类型变量所存的只是这块地址的首地址。
3.所谓的引用,相当于C语言中的指针,存的是一个地址,根据这个地址才可以访问需要的数据。相当于间接访问。
4.通过构造器 new 出来的都叫对象,你所说的引用对象其实只是一个引用类型变量,只是我们习惯将这种类型的变量叫做引用对象,其实这样不好,如果这个引用变量为 null ,它还能叫对象吗?只是从老程序员哪儿传下来的,大家也都习惯了,只要理解它的真实意思就好。
5.地址值就是数据在内存中的存储位置(汇编语言在这方面讲的较多)。
6.哈希值是根据哈希算法得到的值,地址值也有根据哈希值来计算的,两个不一定相等。(这又涉及到数据结构)

以上内容不一定全面和完全正确,如果是自己去看了相关的内容再理解可能效果更好。基础很重要啊

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1 赞一个!

查看全部评分

回复 使用道具 举报
HASH值和地址是两码事:
哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。HASH是根据文件的内容的数据通过逻辑运算得到的数值, 不同的文件得到的HASH值是不同的, 所以你可以自己修改返回的HASH值。
地址是变量在内存中储存的地方,是不可控的。当你定义一个变量如:int a; 内存就自动分配一个地址用来记录这个变量。该地址由计算机分配,不是你能改变的。在java中已经没有了指针的概念,所以不讨论地址。在C中求地址是&符号,如&a,就可以知道变量a在计算机中分配的地址值。

对象引用与对象的区别:
String  str=new String("str");把这句话拆开:
String str;  //这就是创建了一个String类对象的引用,也就是说这个变量str可以指向任何String对象
str= new String("str"); //这就是创建一个普通的String对象,并且使它被str变量引用,当然,你可以改变str引用的类,只要还是String类就OK了。


评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1 赞一个!

查看全部评分

回复 使用道具 举报
int a=1;   a 既不是引用、也不是对象。a只是一个变量。引用就相当于继承、子类继承父类的属性。
什么是引用:
比如:String s = new String("aaa");
这里的s保存在栈内存,而s所指向的对象保存在堆内存,通过s可以找到堆内存中对应的对象。

哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 ixiangfeng 于 2013-11-29 13:08 编辑

int a = 1;a是普通变量,值为1,存储在栈内存中的,应该不属于引用也不属于对象吧  String  str=new String("str"); str是引用变量来的 存储在栈内存中, 指向堆内存中的new String("str")对象
哈希值是由JVM管理的内存地址编号,并不是真实的内存地址,因为你可以重写hashCode()方法,这就证明它并不是真实的存储地址
引用的意思是它里面存放的是地址,指向某一个对象,引用里面存放的地址是谁那么这个引用就指向哪个对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马