首页编程java编程java 什么是对象地址 如何获取到JAVA对象所在的内存地址

java 什么是对象地址 如何获取到JAVA对象所在的内存地址

编程之家2023-10-1299次浏览

本篇文章给大家谈谈java 什么是对象地址,以及如何获取到JAVA对象所在的内存地址对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

java 什么是对象地址 如何获取到JAVA对象所在的内存地址

java中什么是类和对象

类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象。在面向对象的程序设计语言中,类是对一类“事物”的属性与行为的抽象。举一个例子说明下类,比如Person(人)就是一个类,那么具体的某个人“张三”就是“人类”这个类的对象,而“姓名、身高、体重”等信息就是对象的属性,人的动作比如“吃饭、穿衣”等就是对象的方法。总之类就是有相同特征的事物的集合,而对象就是类的一个具体实例。同时类有多态和继承,例如“人类”可以分为“男人、女人”,“老人、小孩”那么“男人、女人”就是“人类”的子类等等。

Java语言中对类Person的定义往往如下:

public class Person{

java 什么是对象地址 如何获取到JAVA对象所在的内存地址

private String name;//属性:姓名

private int height;//属性:身高

private int weight;//属性:体重

java 什么是对象地址 如何获取到JAVA对象所在的内存地址

public Person(){}

public Person(String name, int height, int weight){

this.name= name;

this.height= height;

this.weight= weight;

}

//... some methods...

public void doSth(){//行为:

//... do something

}}

Java中的类

类可以看成是创建Java对象的模板。

通过下面一个简单的类来理解下Java中类的定义:

public class Dog{

String breed; int age; String color; void barking(){

}

void hungry(){

}

void sleeping(){

}}

一个类可以包含以下类型变量:

局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。

成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。

类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。

一个类可以拥有多个方法,在上面的例子中:barking()、hungry()和sleeping()都是Dog类的方法。

Java对象的引用中存放的到底是对象的首地址还是散列码

首先,可以确定这两个肯定不是同一个对象

System.out.println(s1== s2);比较的是地址值,这句话打印出来的结果是false已经验证了。

s1和s2的散列码是一样的,是因为在java.lang.String类中将Object类的hashCode()方法覆写了。

Object类中的hashCode()返回的是通过将该对象的内部地址转换成一个整数也就是哈希码,由于每个对象的内存地址都不一样,所以哈希码也不一样。

但是在String类中覆写的hashCode()方法

String对象的哈希码根据以下公式计算:

s[0]*31^(n-1)+ s[1]*31^(n-2)+...+ s[n-1]

使用 int算法,这里 s[i]是字符串的第 i

个字符,n是字符串的长度,^表示求幂。(空字符串的哈希值为 0。)

你的s1,s2都是“hello”,由此算法计算的hashCode必然是一样的。

至于引用中存放的到底是对象的首地址还是散列码,我没看过相关文档。

不过既然s1,s2是不同的字符串对象的引用,并且hashCode是一样的,如果说引用中存放的是hashCode,那么该怎么区分?

如何获得java对象的内存地址

publicclass对象地址

{

publicstaticvoidmain(String[]args)

{

System.out.println("\n\t\t==========如何获取对象地址?==========\n");

init();

}//初始化!

privatestaticvoidinit()

{

//演示:创建对象!

Dogd1=newDog();

Dogd2=newDog("白色");

d1.show();

d2.show();

System.out.println("\n对象内存地址-->>对象所属类型:"+d1+"<<--这就是对象内存中哈希值16进制的地址");

System.out.println("对象内存地址-->>对象所属类型:"+d2+"<<--这就是对象内存中哈希值16进制的地址\n");

System.out.println("d1对象所属类:"+d1.getClass());

System.out.println("d1对象所属地址十进制:"+d1.hashCode()+"转成16进制就和上面一样了\n");

System.out.println("d2对象所属类:"+d2.getClass());

System.out.println("d2对象所属地址十进制:"+d2.hashCode()+"转成16进制就和上面一样了\n");

}

}

//测试类,小狗!

classDog

{

Stringcolor="黑色";

Dog(){}

Dog(Stringcolor){this.color=color;}

voidshow()

{

System.out.println("这是一个"+color+"的小狗");

}

}

如何获取到JAVA对象所在的内存地址

1、首先打开java构造方法代码。

2、接下来就可以获得网卡物理地址方法代码。

3、然后得到获得机器IP地址方法代码。

4、然后得到获得机器子网掩码方法代码。

5、然后得到获得机器默认网关方法代码。

6、然后得到获得DNS方法代码。

7、最后得到主函数测试方法代码。

扩展资料

当使用80386时,必须区分以下三种不同的地址:

逻辑地址:机器语言指令仍用这种地址指定一个操作数的地址或一条指令的地址。这种寻址方式在Intel的分段结构中表现得尤为具体,它使得MS-DOS或Windows程序员把程序分为若干段。每个逻辑地址都由一个段和偏移量组成。

线性地址:针对32位CPU,线性地址是一个32位的无符号整数,可以表达高达2³²(4GB)的地址。通常用16进制表示线性地址,其取值范围为0x00000000~0xffffffff。对64位CPU,线性地址是一个64位的无符号整数,可以表达高达2⁶⁴。

物理地址:也就是内存单元的实际地址,用于芯片级内存单元寻址。物理地址也由32位无符号整数表示。

电脑的内存(尤其是指主存)是由许多“内存地址”所组成的,每个内存地址都有一个“物理地址”,能供CPU(或其他设备)访问。一般,只有如BIOS、操作系统及部分特定之公用软件(如内存测试软件)等系统软件;

能使用机器码的运算对象或寄存器对物理地址定址,指示CPU要求内存控制器之类的硬件设备,使用内存总线或系统总线,亦或分别之控制总线、地址总线及数据总线,运行该程序之命令。

内存控制器的总线是由数条并行的线路所组成的,每条线路表示一个比特。总线的宽度因此依电脑不同,决定了可定址之存储单位数量,以及每一单位内的比特数量。

计算机程序使用内存地址来运行机器码、存储及截取数据。大多数的应用程序无法得知实际的物理地址,而是使用电脑的内存管理单元及操作系统的内存映射,为“逻辑地址”或虚拟地址定址。

参考资料:百度百科-内存地址

好了,文章到此结束,希望可以帮助到大家。

北京投诉网(北京投诉网站平台)java里的$什么意思(JAVA 中$符号是什么意思)