主题:[讨论]很普通但很困惑的问题,请指教
rainsunneau
[专家分:60] 发布于 2007-11-12 11:28:00
class Account{
}
public class mainClass{
public static void main(String args[])
{
Account account1=new Account();//[color=FF0000]问题就在这里,我写到后面 [/color]
}
}
就是这句,通常我们说是创建一个类的实例,即对象,名字叫account1.
我今天看到一本书上说:创建了一个类的实例,account1引用这个实例。那么account1
到底是类Account的一个实例那,还是实例的一个引用那?
回复列表 (共5个回复)
沙发
happyboy2007 [专家分:3900] 发布于 2007-11-12 16:37:00
只要使用new运算符就表示创建此类的一个实例。
如 String s1 = "abc" 或 String s1 = new String("abc"); //都表示实例化一个String的对象。
String s2 = s1; //表示s2并非是一个实例,而是对s1这个对象的引用。
板凳
haoboy0817 [专家分:880] 发布于 2007-11-12 20:15:00
new Acount();
这是创建了一个Acount类的实例(对象),
Acount acount1=new Acount();
这是把对new Acount()创建的实例的引用赋给了acount1,当然,acount是Acount类型的了!!
4 楼
rainsunneau [专家分:60] 发布于 2007-11-13 17:16:00
谢谢
我认为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 楼
justforfun626 [专家分:18460] 发布于 2007-11-14 01:41:00
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!
我来回复