结构体和类使用的区别

结构体和类使用的区别前段时间写推力叠加时遇到的一个问题 我当时最开始是用两个列表分别存储由推力和方向得到的速度 速度的持续时间 下标一一对应 后来觉得可以用结构体来存储速度和持续时间 这样就只需要一个列表管理就可以了 能少用一次遍历 同时更好的面向对象吧 然后用结构体改的时候却发现结构体里的字段不能直接用来加等减等运算 因为结构体里的字段是放在栈里的 为值类型 后来就把结构体改成类解决了这个问题 因为类的存储是在堆里

前段时间写推力叠加时遇到的一个问题,我当时最开始是用两个列表分别存储由推力和方向得到的速度、速度的持续时间,下标一一对应。后来觉得可以用结构体来存储速度和持续时间,这样就只需要一个列表管理就可以了,能少用一次遍历,同时更好的面向对象吧。然后用结构体改的时候却发现结构体里的字段不能直接用来加等减等运算,因为结构体里的字段是放在栈里的,为值类型。后来就把结构体改成类解决了这个问题,因为类的存储是在堆里的,为引用类型。所以想总结下两者的区别:


1.结构体字段不能初始化,类的字段可以初始化

在这里插入图片描述


2.结构体是值类型,存储在栈;类是引用类型,存储在堆

在这里插入图片描述


3.结构体不能再写无参的构造函数,类可以;不过都可以写带参的构造函数

在这里插入图片描述
在这里插入图片描述


4.结构体的构造函数中必须为所有字段赋值,类可以不必全部赋值

在这里插入图片描述


5.结构体创建对象的方式有些不同

在这里插入图片描述


6.总结一下,分别什么时候用?

(1)结构存储在栈中,而栈有1个特点,就是空间较小,但是访问速度较快,堆空间较大,但是访问速度相对较慢.所以当我们描述1个轻量级对象的时候,可以将其定义为结构来提高效率.比如点,矩形,颜色,这些对象是轻量级的对象,因为描述他们,只需要少量的字段。当描述1个重量级对象的时候,我们知道类的对象是存储在堆空间中的,我们就将重量级对象定义为类。虽然它们都可以包含数据成员和函数成员的数据结构,不过结构体与类不同的是,结构体是值类型并且不需要堆分配,结构体的变量直接包含结构的数据,而类的变量包含对数据的引用。
(2)我们在变量传值的时候,我就是希望传递对象的拷贝,而不是对象的引用地址,那么这个时候也可以使用结构体了。
(3)我看一些项目里使用结构体的地方,一般都是字段纯数量或者是纯字符串的地方,所以某个对象纯数据类型,没有复杂的方法、逻辑、运算的可以考虑使用结构体。这个是目前使用结构体的主要原因,还有一个是结构体在编辑器(比如Unity)上显示会更方便。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210411.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午7:39
下一篇 2026年3月19日 上午7:39


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号