java中的以下内容有什么区别:
对象
参考ID
参考变量
当我看到这样的陈述时:
Emp e = new Emp();
此处Emp
是类,但e
不是它的对象?如果是这样......在其他地方我看到了这个:
cos如果是这样那么..在某处就像是
Emp e = new Local();
本地是Emp
的子类。那么e
在这种情况下意味着什么呢?它有什么作用?
答案 0 :(得分:3)
一个对象本质上是一堆生活在堆中的内存。 (对象的部分内存结构包括对该对象的类的引用。)
Java中的对象变量(如本例中的e
)包含 references 给生活在堆中的对象。
课程完全不同于所有这些课程;他们可能会描述该类型对象的结构,并且具有方法实现等,但是类与其他对象存在于完全不同的内存区域。
答案 1 :(得分:1)
Emp e
此语句创建一个引用变量' e'在堆栈中。
new Emp()
此语句在堆中创建一个对象。一个对象只是一个缓冲区,或者我们可以说是一块内存"。因此,缓冲区在堆中保留。因此声明,
Emp e=new Emp()
将堆中创建的对象的引用ID传递给引用变量' e'。
答案 2 :(得分:1)
Emp{
int salary;
int name;
}
新 新的Emp(); Emp是一个类,new用于保留堆中的内存区域。new返回其保留的内存地址。 一旦您写入新的Emp(),就会在堆中保留一个内存缓冲区。此保留区的大小取决于类的数据成员的大小(此处为2个字节,因为int salal占用1个字节,而int name占用1个字节字节。)
参考ID
对象的参考ID是对象存储位置的地址。
new Emp();
创建对象,但其地址未存储在任何地方。
参考变量 现在,假设您要一次又一次使用同一对象,那么您必须具有其地址位置(引用ID)。 为了存储其addressid(ReferenceId),可以使用参考变量。 引用变量始终占用4个字节,它们只是存储地址(对象的引用)的变量。
创建参考变量 Emp e2;
将参考ID分配给参考变量 Emp e2 = new Emp();
答案 3 :(得分:1)
这里:
Emp e=new Emp();
e
是引用变量,它保存在堆区域中创建的对象的地址。
在对象的魔术方法(对象共有9种方法)(即toString()
方法的帮助下,以哈希码的形式生成参考ID;在内部,使用对象的toString
方法,它会为运行时创建的每个对象自动生成引用ID。
对象的内存始终保留在RAM的堆区域中。 bcz在Java中没有显式指针可用。在这里,ref变量指向堆栈,以引用对象以在Heap中保留内存; bcz对象也不知道内存在哪里。
堆栈段也是内存的一部分:当我们给ref变量时,ref变量必须已经存储在堆栈中,然后ref变量知道head的哪一部分内存是空闲的,它指向对象保留位置,并保存在引用变量中
'new'是可文本化的运算符,有助于创建对象。
Emp()
:是班级的子班级;如果程序员没有在Java程序中显式提供构造函数,则编译器会隐式添加一个默认构造函数,并且将子类名称指定为相同类名称的原因是,这样“ new”可以轻松地知道非类需要多少内存。静态数据成员。
答案 4 :(得分:0)
这是一个简单的问题......
emp e=new emp();
此处,e
是对象的引用ID。 emp
是类的引用变量,您的对象id与状态和行为的组合不同。
答案 5 :(得分:0)
我刚刚制作了一个显示对象参考ID的程序。
class abc
{
int a=10;
int b;
}
class t extends abc
{
public static void main(String args[])
{
abc A=new abc();
System.out.println(""+A);
}
}
输出:令人震惊的十六进制字符串:
“ABC @ 52e922”
Java以十六进制字符串的形式将对象的实际位置映射到一个单独的位置,该字符串称为引用ID。它永远不会显示存储在内存中的对象的实际位置。
答案 6 :(得分:0)
Car c = new Car();
对象不是它只是堆中的缓冲区或内存,其中非静态数据成员获取内存。
引用ID由堆栈中的新运算符生成,它是一个内存位置,包含哈希码形式的对象的内存位置。引用ID是到达对象的唯一方法。生成引用ID是因为在java中有一条规则,即在运行时分配的内存没有任何名称,我们都知道对象是在运行时创建的,因此它们也没有名称,我们需要一个唯一的ID来对其执行操作对象,这就是为什么java中每个对象都有唯一的引用ID。
在上面的示例中,c是存储引用ID的引用变量。
答案 7 :(得分:-1)
对象不是它只是一个堆区域中的内存区域或缓冲区,其中一个类的所有实例数据成员都在获取内存。
Emp e = new Emp();
在上面的语句中e是一个引用变量,它保存了对象的引用id,但是为了安全起见,java不允许任何人获取实际对象的id它也可以自我解释,因为我们使用的是word引用重定向我们的id,我们没有获得对象的实际id,而只是它的引用。
也引用id将命名为对象的#code的classname @十六进制表示。