回 帖 发 新 帖 刷新版面

主题:[讨论]很普通但很困惑的问题,请指教

class Account{

}
public class mainClass{
 public static void main(String args[])
 {
  Account account1=new Account();//[color=FF0000]问题就在这里,我写到后面 [/color]
 }
}
就是这句,通常我们说是创建一个类的实例,即对象,名字叫account1.
我今天看到一本书上说:创建了一个类的实例,account1引用这个实例。那么account1
到底是类Account的一个实例那,还是实例的一个引用那?

回复列表 (共5个回复)

沙发

只要使用new运算符就表示创建此类的一个实例。
如 String s1 = "abc" 或 String s1 = new String("abc"); //都表示实例化一个String的对象。
   String s2 = s1;   //表示s2并非是一个实例,而是对s1这个对象的引用。

板凳

new Acount();
这是创建了一个Acount类的实例(对象),
Acount acount1=new Acount();
这是把对new Acount()创建的实例的引用赋给了acount1,当然,acount是Acount类型的了!!

3 楼

谢谢 

4 楼

谢谢
我认为2楼的说的更对一些;
我今天看到了一个问题用你的说法就讲不通,问题是这样的:
public class autoBoxDemo{
 public static void main(String args[])
{
 Integer i1=100;
 Integer i2=100;
if(i1==i2)
System.out.prinln("i1==i2");
else
System.out.println("i1!=i2");
}
}
结果是:i1==i2;


public class autoBoxDemo{
 public static void main(String args[])
{
 Integer i1=200;//只这里不同
 Integer i2=200;
if(i1==i2)
System.out.prinln("i1==i2");
else
System.out.println("i1!=i2");
}
}
结果是:i1!=i2
那本书上给出的解释是"=="运算符用于比较两个基本数据类型是否相等,也用于
比较两个引用的名称是否参考至同一个对象。而-128到127的之间的值被装箱为Integer
对象时内存重用。超出这个范围则不一样了。由此我认为eg1中的i1,i2只是引用名称
他们参考至相同的对象;eg2中的i1,i2参考至不同的对象。

只是讨论,还是要谢谢你的解答。

5 楼

In Java, every object is accessed by its reference (like C++ pointer, but no C/C++ like pointer operations!). 

In Java, you have no way to access any object without through its reference (DIFFERENT from c++!!!).

[color=red][b]1 楼 is WRONG!!!![/b][/color]

Thanks!

我来回复

您尚未登录,请登录后再回复。点此登录或注册