2 mu bu shi ding mu_bu_shi_ding 于 2017.01.06 21:58 提问

Java :创建对象时 每一个new出来的对象给给对象变量赋值时 都是一个新地址吗?(如图)

图片说明

6个回答

Readiay
Readiay   2017.01.07 10:39
已采纳

每一个new出来的对象给给对象变量赋值时 都是一个新地址吗?
我肯定回答你:是的,每次都是一个新地址。

在这里有点需要注意,对象是不是一样有两种比较方式,一种就是是不是同一个,一种就是是不是值相等。

是不是同一个,就是==号比较,例如:你有100块,我有100块,比较的两个对象是同一个物体 你用==比较就是false
== 比较的是内存中的地址是不是相同的,也就是你问的a与b的地址是不是相同,很显然不同,因为他们不是同一个。

另外一种就是是不是值相同,例如你的键盘ikbc104c这个型号的,你同事也有一个ikbc104c型号的,
这两个是相同的,比较的值是不是相同的。就像你有100块,我有100块,我们的钱是一样多的。
这个使用equalse比较的,如果不覆盖,就是调用Object的equalse方法,比较内存是不是同一个地址。

sun1021873926
sun1021873926   Ds   Rxr 2017.01.06 22:04

是,每次的地址一般情况下都不相同。

u010528826
u010528826   2017.01.06 22:05

每个对象在被实例化时,都会在堆中分配新的地址。如上面代码,你可以把两次实例化后的内存地址打印出来,可以很明确的看出是两个不同的地址。

oyljerry
oyljerry   Ds   Rxr 2017.01.06 22:25

一般情况是每次都会在堆上创建新对象,所以a,b指向的地址不同。
一些情况为了性能,会有对象池,通过工厂模式等来实现

http://www.cnblogs.com/aurawing/articles/1887029.html

abl0430
abl0430   2017.01.07 02:27

你那两个Y不在同一个类中,分配的空间不在地址不一样的 Y被new出来后 你可以实用里面的方法

arsaycode
arsaycode   2017.04.19 15:11

肯定不是同一个,你也可以直接打印出来,或者 用“==”比较一下

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
浅谈new对象并给属性赋值,调用方法的内存机制
下面来看一段新建对象的简单代码:public class Student {    String name;    int age ;    public void play   (){        System.out.print(name+"在玩耍")}    public void print(String sname){        System.out.print(name+"在和"...
java中对象变量及new对像赋值的1个语法现像
corejava中程序清单7-6,显示和复制图像。在ImageComponen和类中以下语句可以编译通过。 private Image image;    public ImageComponent()  {    image=new ImageIcon("blue-ball.gif").getImage();  } 但是如果改写成以下,则在编译过程中“=”处会提示错误:需要标识符
java 中 new 对象 与 直接 赋值的对象为何不一样。
在 java 开发中, 下面的代码   String a ="abc";   String b = new String("abc");   System.out.println(a==c);   这样打印出来的结果是"false "     这是为什么呢。  java  对对象的管理是维护一张 hashcode  内存表的。  但 第一行 String a = "abc"
java中new出来一个对象和定义一个对象赋值为空有什么不同
java中new出来一个对象和定义一个对象赋值为空有什么不同 new 一个对象出来,比如SomeClass sc=new SomeClass();这个时候已经为sc这个对象分配了指向 new SomeClass() 所创建的内存空间。即对这个对象sc进行了实例化。而SomeClass sc=null,则sc对象未进行实例化,是一个空的对象,未能指向任何内存空间。
1.在使用new创建数组后,此时数组还是一个引用数组。 只有再创建新的对象,并把对象赋值给数组引用,到此初始化结束2.什么是引用类型?
public class swap { public static void main(String[] args) { int[] a=new int[2]; a[1]=12;////基本数据类型new 之后,通过赋值语句来传值 swap[] s = new swap[5]; int i = 0; while (i s[i++] = new swap(); //1. 在Java
JAVA中String直接赋值与new出来的对象赋值的区别
举个例子,比如
java中,只声明一个对象不赋值,与声明一个对象并赋为null,有啥区别?
转自:http://www.oschina.net/question/557858_127408 比如: public MainGame   mMainGame ; 与 public MainGame   mMainGame = null;这两句的区别? 编译的时候会不同,未赋值,直接使用编译时会报错。 不赋值就不会分配空间,赋值null会分配0大小的初始空间.
Java初学习 - 多态和实现接口的类的对象赋值给接口引用的方法
原文地址:http://blog.sina.com.cn/s/blog_50f0369c0100b567.html     接口的灵活性就在于“规定一个类必须做什么,而不管你如何做”。我们可以定义一个接口类型的引用变量来引用实现接口的类的实例,当这个引用调用方法时,它会根据实际引用的类的实例来判断具体调用哪个方法,这和上述的超类对象引用访问子类对象的机制相似。 /定义接口InterA inte
通过js动态生成对象,并给对象赋值
pageEncoding="UTF-8"%> //动态创建对象,并保存数据 function saveData(inputName,fm){ var obj = new Object(); for(j=0;j){ obj[fm[j]] =$("#"+inputName[j]).val();
String直接赋值和new一个对象的理解
我们直接来看两句代码 String str1 = new String("abc"); String str2 = "abc"; System.out.println(str1 == str2); //输出false 首先,既然有new这个关键字,那么一定要在堆内存中开辟空间,存放数据。所以 str1 指向的是堆内存中