黑马程序员技术交流社区
标题:
类和结构的一点区别
[打印本页]
作者:
朱传波
时间:
2013-3-17 08:48
标题:
类和结构的一点区别
类和结构是两个非常相似的概念。两者都可以包含数据成员的数据结构。包含数据类型,方法以及构造方法。但他们又是两个完全不同的概念。
从大的方面看,
首先,结构是指将多种变量同时定义的一个小组
比如,我定义了一个结构,这个结构下,我可以定义它的一些各种参数
结构是用来存储数据的,是值类型
而类,则是一个种类的统称,这个种类下,既包含属性,又包含方法。
这个概念是抽象的,你可以随时引用里面的方法以及属性,是引用类型
结构和类都可以有构造方法,当我们在类中不写构造函数时,系统会默认为我们写一个无参数的构造方法 。一旦我们写了一个有参数的够早方法,原来的那个无参数的构造方法就不存在了。
结构不能使用默认的构造函数,只能使用带参数的构造函数,当定义带参数的构造函数时,一定要完成结构所有字段的初始化,如果没有完成所有字段的初始化,编译时会发生错误。
这也正是结构的优点,避免了用户忘记对某个参数进行赋值。
作者:
曾玉锋
时间:
2013-3-17 15:13
本帖最后由 曾玉锋 于 2013-3-17 15:14 编辑
我来补充一点:
1.结构是值类型,在栈上存储。
类是引用类型,在堆上分配实际空间存储,在栈上存储对象在堆上的地址。
2.结构类型的变量是在栈上创建,int a=1;int b=1; 虽然a,b在栈上各自的空间中存储的都是值1,但是他 们的存储位置是不一样的。
下面一个例子:
int a=1;
int c=a;
虽然,c的值是由a赋值,但a只是copy了一份值(1)到c空间,所以,改变a的值对c是没有影响的。
而类类型的变量是在栈上创建,存储的是在堆中对象的地址
例:
假如有一个Person类,Person类有属性Name
Person a=new Person();
Person c=a;
a复制了一份a中new Person()在堆空间中的地址给c, 如果通过a改变new Person()对象的Name,则c的值也就改变了。
小结:结构类型的变量就像一个封闭的空间,只要本身不改变,则永远不变。
而类类型的变量如果和其它变量拥有共同的堆地址(交集),则若堆地址改变,所有引用该堆地址的变量都发生改变。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2