C++ Java Go 数据类型及引用类型

引入

在C++、Java、Go中,我们使用的数据大致相同、但操作有不同,本篇就这几种语言数据中的一些使用不同之处做一个总结和介绍

常用数据类型

基本类型

整型、浮点型、布尔型等

派生类型

数组等

自定义结构体

如Book

三种语言使用数据

C++

C属于相对于其他两者更底层的一种语言,也是最开放的一种语言。用过Java就知道,Java中的对象都是采用的引用类型,简单说就是每一个对象变量存的实际是一个地址,这个地址中记录的东西才是真正我们要的内容(属性值、方法)。而在C++中如果声明了一个类的对象,那么这个变量存的就是我们的属性值和方法,如果我们把这个对象通过传参给另一个方法执行,那这个方法收到的对象并不是我们之前的对象,而是重新克隆了一个完全一样的对象来操作

void work(set<int> param){
    cout << "param add ="  << &param << endl ;
}
int main() {
    set<int>save;
    work(save);
    cout << "save add =" << &save<< endl ;
    return 0;
    /*
    输出结果
    param add =0x7ffe6bc1baa0
    save add =0x7ffe6bc1ba70
    */
}

也正因为C++有指针这个概念,所以只要你不主动用指针,你的任何变量都不是是一个引用类型(指针类型),当然数据这种东西要除外,因为他就是靠连续地址来工作的。

Java

Java为了降低学习者的学习成本,就对指针这个概念进行了弱化,但Java用指针比其他任何语言都要多。其体现在你的所有类都是采用的引用类型,也就是说你声明的对象变量存的是地址,如果你把这个变量通过传参到另一个方法,也就传的是地址,所以另一个方法中操作的也是你之前那一个变量,这里是和C++很大不同的地方。

public class Main {
    public static void work(Set<Integer>s){
        s.add(2);
    }
    public static void main(String[] args) {
        Set<Integer> s = new HashSet<Integer>();
        s.add(1);
        work(s);
        System.out.println(s); // [1, 2]

    }
}


Go

刚刚接触到Go,可能对Go还不是很了解,但Go在这个方面给我的感觉和C++很相似,因为他有了指针这个东西,所以也基本是我们不用指针就不会出现引用类型,比如我们自定义了一个类Book,那么我们声明的Book对象就不是引用类型,函数传参也是克隆的一个完全一样的新对象。但需要注意的是,Go把map这个数据结构整合进了语言本身,使用map不需要依赖于其他的包,这和list等需要依赖其他包不同。但Go的map和切片(就是数组)一样,是一个引用类型,大概是因为底层实现也是数组的原因把。

小结

  • Java作为一个没有指针的语言,除了基本数据类型外全是引用类型,因为你没法自己定义指针来使用,甚至你可以让你的所有变量都是引用类型(使用基本类型的包装类)
  • C++和Go有指针这个概率,所以所有的数据包括对象都可以不是引用类型,如果你想让它是引用类型可以使用new(type)来接收,但有一点不同就是对于map这个数据结构由于Go本身就实现了它,所以它和数组一样,规定了需要一个地址,所以它是引用类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值