在C++、Java、Go中,我们使用的数据大致相同、但 *** 作有不同,本篇就这几种语言数据中的一些使用不同之处做一个总结和介绍
常用数据类型 基本类型整型、浮点型、布尔型等
派生类型数组等
自定义结构体如Book
三种语言使用数据 C++C属于相对于其他两者更底层的一种语言,也是最开放的一种语言。用过Java就知道,Java中的对象都是采用的引用类型,简单说就是每一个对象变量存的实际是一个地址,这个地址中记录的东西才是真正我们要的内容(属性值、方法)。而在C++中如果声明了一个类的对象,那么这个变量存的就是我们的属性值和方法,如果我们把这个对象通过传参给另一个方法执行,那这个方法收到的对象并不是我们之前的对象,而是重新克隆了一个完全一样的对象来 *** 作
void work(setparam){ cout << "param add =" << ¶m << endl ; } int main() { set save; work(save); cout << "save add =" << &save<< endl ; return 0; }
也正因为C++有指针这个概念,所以只要你不主动用指针,你的任何变量都不是是一个引用类型(指针类型),当然数据这种东西要除外,因为他就是靠连续地址来工作的。
JavaJava为了降低学习者的学习成本,就对指针这个概念进行了弱化,但Java用指针比其他任何语言都要多。其体现在你的所有类都是采用的引用类型,也就是说你声明的对象变量存的是地址,如果你把这个变量通过传参到另一个方法,也就传的是地址,所以另一个方法中 *** 作的也是你之前那一个变量,这里是和C++很大不同的地方。
public class Main { public static void work(SetGos){ s.add(2); } public static void main(String[] args) { Set s = new HashSet (); s.add(1); work(s); System.out.println(s); // [1, 2] } }
刚刚接触到Go,可能对Go还不是很了解,但Go在这个方面给我的感觉和C++很相似,因为他有了指针这个东西,所以也基本是我们不用指针就不会出现引用类型,比如我们自定义了一个类Book,那么我们声明的Book对象就不是引用类型,函数传参也是克隆的一个完全一样的新对象。但需要注意的是,Go把map这个数据结构整合进了语言本身,使用map不需要依赖于其他的包,这和list等需要依赖其他包不同。但Go的map和切片(就是数组)一样,是一个引用类型,大概是因为底层实现也是数组的原因把。
小结- Java作为一个没有指针的语言,除了基本数据类型外全是引用类型,因为你没法自己定义指针来使用,甚至你可以让你的所有变量都是引用类型(使用基本类型的包装类)
- C++和Go有指针这个概率,所以所有的数据包括对象都可以不是引用类型,如果你想让它是引用类型可以使用new(type)来接收,但有一点不同就是对于map这个数据结构由于Go本身就实现了它,所以它和数组一样,规定了需要一个地址,所以它是引用类型。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)