Go语言与Java语言的区别,必须区别。

本文探讨了Go语言与Java在变量声明(切片与数组)、值传递方式(包括数组拷贝与指针)、长度与数据类型、强制类型转换以及特定场景下的随机数生成与数组反转示例。Go的数组是值类型,而Java数组为引用类型,两者在操作上存在显著差别。
摘要由CSDN通过智能技术生成

Go语言与Java语言的区别

  1. var arr []int,这是arr是一个切片slice。而不是数组。切片和数组有区别
  2. 数组是基本数据类型(值类型),相比较Java的数组是引用数据类型,故go语言的数组是值拷贝。如下:
func main(){
	var array =[3]int{1,2,3}
	test(array) // 无效的调用
	fmt.Println(array) // [1 2 3]
}

func test(arr [3]int){
	arr[0] = 666
}

值传递内存图:
在这里插入图片描述

  1. 若使用引用传递(指针),则通过一个指针指向该数组某个位置
func test1(arrP* [3]int){ // 引用传递(需使用到指针),改变数组本身的值
	(*arrP)[0] = 777
}
func main(){
	var array =[3]int{1,2,3}
	// test(array) // 无效的调用
	test1(&array)
	fmt.Println("main()的array",array)
	test2(array)
	test3(array)
}
  1. 在go语言中,长度是数据类型的一部分,数组的长度如果不同决定是不同的数据类型,不可适配。
func test3(arr [4]int){
	arr[0] = 10
	fmt.Println("数组是值传递,不使用指针,改变原数组的值毫无可能")
}
func main(){
	var array =[3]int{1,2,3}
	// test(array) // 无效的调用
	test1(&array)
	fmt.Println("main()的array",array)
	test2(array)
	test3(array)  -> 编译出错!!!
}

在这里插入图片描述
5. 必须强制转换

	//3
	sum := 0
	var avg float64
	for _,value := range arr{
		sum+=value
	}
	avg = float64(sum)/float64(len(arr))
	fmt.Println(sum,"-",avg)
  1. 生成随机数保存于数组并反转练习
package main

import(
	"fmt"
	"time"
	"math/rand"
)

// 随机数组的反转打印
func main(){
	var arr [5] int
	rand.Seed(time.Now().UnixNano())
	len := len(arr)
	for i:=0;i<len;i++{
		arr[i] = rand.Intn(100)
	}
	fmt.Println(arr)

	start := 0
	end := len-1
	for start<end{
		temp := arr[start]
		arr[start] = arr[end]
		arr[end] = temp
		start++
		end--
	}
	fmt.Println(arr)
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值