黑马程序员技术交流社区
标题:
类Car的初始化值是什么??
[打印本页]
作者:
高鑫
时间:
2012-4-28 19:40
标题:
类Car的初始化值是什么??
class Car
{ int num=4;
String color="blue";
void run()
{System.out.println(num+".."+color);};
}
class Demo
{ public static void main(String[]args)
{
new Car();
}
}[/code]
请问这个代码中的new Car()的初始化值是null吗?
第二个
class Car
{ int num=4;
String color="blue";
void run()
{System.out.println(num+".."+color);};
}
class Demo
{ public static void main(String[]args)
{
show(new Car()); //Car在堆内存中创建,请问这个时候,Car的初始化值是null吗?
}
public static void show(Car c)
{
c.num=3;
c.color="black";
c.run();
}
}
复制代码
以上2段代码中 new Car();的初始化值一样吗?初始化值不是应该是null的吗?为什么不是?
作者:
光sail
时间:
2012-4-28 20:17
本帖最后由 光sail 于 2012-4-28 20:27 编辑
1.newCar()表示Car对象在内存中new出了一个对象地址,但这个对象存在两个变量 int num=4,color="blue",
2. show(new Car())表示调用show方法,传入Car对象,并对Car对象两个变量赋值 num=3; c.color="black";
作者:
Friends★
时间:
2012-4-28 20:26
其实你两段代码所要问的意思是一样的!你问的主要是new一个对象时,这个对象默认的num和color的值是多少?
你在new一个对象的时候,在堆内存中已经开辟了一个空间,此时num的值是你上面定义的4,color值是blue,如果
你不重新给新创建的new对象赋值的话,默认打印出的就是num=4;color="blue"。
代码示例:
class Car
{ int num=4;
String color="blue";
void run()
{System.out.println(num+".."+color);};
}
class Test13
{ public static void main(String[]args)
{
//new Car();
Car c= new Car();
//c.color="black";
System.out.println(c.num+" "+c.color);
}
}
运行结果:
4 blue
作者:
一生一世
时间:
2012-4-28 20:39
new出来的对象再堆内存中就有地址,楼上的人说的也有点不合算,要是Car c;这样定义的话,类的对象就是null,只是在stack中有Car类型的一个引用变量,只是它不指向堆内存中的任何空间而已,只是Car类型对象的一种声明,可以用System.out.println(c);来看一下c的值,当没有new对象时,c的值为空,当c = new Car(),以后c的值就不为空了,它就指向内存中的一块地址了,楼主用的是匿名对象,但是它也是有地址的,所以也不为空。
作者:
亚男
时间:
2012-4-28 20:42
两段代码初始化的值是一样的都不是为null而是num为4、color为blue,因为在声明Car的时候就已经为num和color赋值了,但在第二段代码中是直接建立一show方法更改了car的值
作者:
魏征
时间:
2012-4-28 21:03
两个Car类对象中特有属性的初始化是一样的。
new Car();建立了对象就指向了一个地址值,所以new Car()不可能为null,而且两个new Car()的地址值也不是一样的,Car c=new Car();Car对象c的初始化是null,然后new Car();开辟空间分配地址值,将地址值指向了Car对象c。
Car类中的特有属性int类型num,String类型color,在创建对象后,在盏内存中对特有属性初始化,int类型num的初始化值为0,String类型的初始化值为null。然后再指向值。
作者:
魏征
时间:
2012-4-28 21:04
两个Car类对象中特有属性的初始化是一样的。
new Car();建立了对象就指向了一个地址值,所以new Car()不可能为null,而且两个new Car()的地址值也不是一样的,Car c=new Car();Car对象c的初始化是null,然后new Car();开辟空间分配地址值,将地址值指向了Car对象c。
Car类中的特有属性int类型num,String类型color,在创建对象后,在盏内存中对特有属性初始化,int类型num的初始化值为0,String类型的初始化值为null。然后再指向值。
作者:
根号5
时间:
2012-4-28 21:24
本帖最后由 根号5 于 2012-4-28 21:26 编辑
我认为楼主问的这两个问题其实是一个问题,当new一个对象的时候就对应的在堆内存空间中开辟了一个内存空间,这时如果设定一个对象的引用变量指向他,Car c = new Car(),(作为一个类来讲无所谓有没有初始值,赞同楼上的观点)c 也就指向了这个对象的地址。不用管打印"c"还是“new Car”得到的都是这个对象的地址(前提是不重写 toString()方法):代码如下
class Car
{ int num=4;
String color="blue";
void run()
{System.out.println(num+".."+color);};
/*public String toString()
{
return "hello heima";
}*/
}
class Demo
{ public static void main(String[]args)
{
System.out.println( new Car());
}
}
打印结果为 Car@1a80a69
如果把上边的toString()方法的注释去掉,打印的就是 hello heima
初始值什么的 关于值的都是针对变量或常量(总之都是关于量的)而言的,此时如果仅仅在Demo中定义一个Car类型的引用:也就是Car car;这样的car是一个引用变量,不指向任何对象,此时值为null。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2