精华内容
下载资源
问答
  • 下面哪种类型不是引用类型
    千次阅读
    2019-08-20 20:48:29

    值类型与引用类型

    不管是Java还是golang中,都有值类型和引用类型的概念。在使用两者时,发现这两种语言之间还是有差异的。

    值类型

    值类型:这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中。当使用等号=将一个变量的值赋给另一个变量时,如 j = i ,实际上是在内存中将 i 的值进行了拷贝。可以通过 &i 获取变量 i 的内存地址。 值拷贝

    引用类型

    引用类型:引用类型拥有更复杂的存储结构:(1)通过make创建并分配内存 (2)初始化一系列属性:指针、长度、哈希分布、数据队列等。一个引用类型的变量r1存储的是r1的值所在的内存地址(数字),或内存地址中第一个元素所在的位置,这个内存地址被称之为指针,这个指针实际上也被存在另外的某一个变量中。

    区别

    值类型和引用类型两者之间的主要区别:拷贝操作和函数传参。

    数组array和切片slice的实例

    1)如下代码片段定义了一个数组a,它是值类型,复制给b是值拷贝copy,当b发生变化后a并不会发生任何变化,程序的执行结果如下所示:

    //由 main 函数作为程序入口点启动
    func main() {
    	a :=[5]int{1,2,3,4,5}    //数组Array类型,带有具体的长度
    	b := a   //值拷贝,等价于a :=[5]int{1,2,3,4,5}, b :=[5]int{1,2,3,4,5}
    	b[2] = 6 //b :=[5]int{1,2,3,4,5},b[2]=8, b = [5]int{1,2,6,4,5}
    	fmt.Println(a, b)
    }
    

    程序运行结果:
    [1 2 3 4 5] [1 2 6 4 5]

    2)切片则不然,由于切片是引用类型,其拷贝(赋值)属于址拷贝,所以其中一个元素的值发生变化,拷贝的另一方也会发生改变。
    //由 main 函数作为程序入口点启动

    func main() {
    	a :=[]int{1,2,3,4,5}  //切片Slice类型,不带长度
    	b := a                //址拷贝
    	b[2] = 6              
    	fmt.Println(a, b)
    }
    

    分析:
    切片的底层数据结构其实是一个指针,切片a和b本质上指向同一个底层数组。
    程序运行结果:
    [1 2 6 4 5] [1 2 6 4 5]

    golang中的struct类型

    Golang中没有class关键字来定义类,对于事物的抽象以struct来定义,因此一个struct变量可以被看做一个类实例。但是这有别于java,因为struct在方法中传参时是值类型而非引用类型,所以当我们需要在方法内改变这个对象的字段值时,应该使用的是struct变量的指针,而非struct变量。例如:

    type Student struct{
             Name string
    }
     
    func (s * Student) Set(name string){
                  s.Name = name
    }
    func (s Student) Get()string{
               return s.Name
    }
    

    原文链接:https://blog.csdn.net/zerro99/article/details/11525757

    由上可知:

    • 如果方法内部会修改当前对象的字段或改变其值,需要用指针。
    • 由于值传递是(内存)复制,因此,如果对象比较大,应该使用指针(地址),避免内存拷贝(值类型等变量指向内存中的值,如果有值类型变量存放大量元素,或造成内存的大量拷贝)。

    注意:不见得使用指针就一定好过传值,因为按照 Go 的内存管理策略,涉及指针和引用的对象会被分配到 GC Heap 上。如果对象很 “小”,显然要比在栈上进行值拷贝 “耗费” 更多。

    与Java差异

    另外与java不同的一点,数组Array在golang里并不被当做引用类型传递,而是值类型传递。按照Golang的说法,Golang中所有的基本类型都属于值类型,但是有几个类型比较特殊,表现出引用类型的特征,分别是slice、map、channel、interface,除赋值以外它们都可以当做引用类型来使用。因此当我们这样做时,可以直接使用变量本身而不用指针:

    type MyMap map[string]string
     
    func (s  MyMap) Set(name,value string){
                  s[name] = value
    }
    
    func (s MyMap) Get(name string)string{
               return s[name]
    }
    

    上面的例子由于MyMap是一个map,而map是引用类型,因此在方法中作为参数使用时可以直接使用MyMap来改变其值,而不用使用MyMap的指针,其实map本身是一个字典的指针。

    更多相关内容
  • 1.基本数据类型(八): 类型名称 占用字节 数据范围 默认值 字 节 byte 1 -128 ~ 127 0 短整型 short 2 -32768 ~ 32767 0 整 型 int 4 -2^31 ~ 2^31 - 1 0 长整型 long 8 -2^63 ~ 2^63 - 1 0L 单...

    1、位(bit):
    又名 比特位,表示二进制位,是计算中内部数据储存的最小单位。一个二进制位只能表示0和1两种状态。

    2、字节(byte):
    是计算机中处理数据的基本单位。一个字节等于八位(1Byte = 8bit)

    3、字(word):
    计算机进行数据处理时,一次存取、加工和传送的数据长度。在常见的计算机编码格式下,一个字等于两个字节(十六位)(1word = 2Byte = 16bit)

    一、JAVA中的数据类型分为两大类:

    1、基本数据类型:整型、浮点型、字符型、布尔型
    整数类型 —— byte、short、int、long,
    浮点类型 —— float、double
    字符类型 —— char
    布尔类型 —— boolean
    2、引用数据类型:接口(interface)、数组([ ])、类(class)。

    1.基本数据类型(八种):

    1.1 整数类型
    整型占用字节空间大小取值范围默认值
    byte1字节-128 ~ 1270
    short2字节-32768 ~ 327670
    int4字节-2^31 ~ (2^31) - 10
    long8字节-2^63 ~ (2^63) - 10L
    1.2 浮点类型(小数)
    浮点型占用字节空间大小取值范围默认值
    float4字节10^380.0F
    double8字节10^3080.0
    1.3 字符类型
    字符型占用字节空间大小取值范围默认值
    char2字节0 ~ 65535‘\u0’
    1.4 布尔类型
    布尔型占用字节空间大小取值范围默认值
    boolean视情况而定true、falsefalse

    2.引用数据类型(三种):

    引用数据类型是建立在八大基本数据类型基础之上,包括数组、接口、类。引用数据类型是由用户自定义,用来限制其他数据类型。简单的说,除八大基本类型之外的所有数据类型,都为引用数据类型。
    所有引用类型的默认值都为 null 。

    二、数据类型转换:

    转化从低级到高级:byte,short,char(三者同级)—> int —> long—> float —> double
    1、低级转换高级:自动类型转换
    2、高级转换低级:强制类型转换

    注意事项
    1、强制类型转换过程中可能造成数据丢失;
    2、强制类型转换时要在需要转换的数据类型前加上 ()。
    例如:

    public class Demo1 {
    	public static void main(String[] args) {
    		int intNumber = 10;
    		float floatNumber = 3.4F;
    		double doubleNumber = 6.18;
    		
    		// 低优先级类型数据 + 高优先级类型数据 ——> 结果会自动转换为高优先级数据。
    		System.out.println("int + float = " + (intNumber + floatNumber));
    		System.out.println("int + double = " + (intNumber + doubleNumber));
    		
    		System.out.println();
    		// 将 int + double 所得到的值进行强制转转换,为int类型数据,造成数据精度丢失
    		System.out.println("(强制类型转换) int + double = " + (int)(intNumber + doubleNumber));
    		System.out.println("(强制类型转换) double = " + (int)doubleNumber);
    	}
    }
    

    输出结果:

    int + float = 13.4
    int + double = 16.18
    
    (强制类型转换) int + double = 16
    (强制类型转换) double = 6
    
    展开全文
  • Java八基本数据类型+三种引用数据类型 基本数据类型 1基本数据类型举例 数据类型 中文解释 举例 int 引用数据类型 基本数据类型代码举例 int i=0; cxv cxvfg

    基本数据类型

    1基本数据类型举例

    数据类型中文解释默认值占用/字节大小/位数据范围
    byte018-2^7~2*7-1
    short短整数0216-2^15~2*15-1
    int整数0432-2^31~2*31-1
    long长整数0864-2^63~2*63-1
    Char单字符\u00002160~65536
    Float单精度0.0432-3.4E38(-3.4x10^38)~3.4E38(-3.4x10*38)
    Double双精度0.0864-1.7E308(-1.7x10^308)~1.7E308(-1.7x10*308)
    boolean布尔false

    在Java之中有一个特点:默认的一个整数,其对应的类型永远是int。
    float :有限 离散 舍入误差 大约 接近但不等于
    最好完全避免使用浮点数进行比较

    引用数据类型

    引用数据类型:
    类(class), 接口(interface),数组(array),(枚举类型、注解类型、字符串(String)类型)
    简单来说,只要不是基本数据类型.都是引用数据类型

    两者的不同

    一、从概念方面来说

    1,基本数据类型:变量名指向具体的数值

    2,引用数据类型:变量名不是指向具体的数值,而是指向存数据的内存地址,.也及时hash值

    二、从内存的构建方面来说(内存中,有堆内存和栈内存两者)

    1,基本数据类型:被创建时,在栈内存中会被划分出一定的内存,并将数值存储在该内存中.

    2,引用数据类型:被创建时,首先会在栈内存中分配一块空间,然后在堆内存中也会分配一块具体的空间用来存储数据的具体信息,即hash值,然后由栈中引用指向堆中的对象地址.

    举个例子

    //基本数据类型作为方法参数被调用
    public class Main{
    	public static void main(String[] args){
    		//基本数据类型
    		int i = 1;
    		int j = 1;
    		double d = 1.2;
     
    		//引用数据类型
    		String str = "Hello";
    		String str1= "Hello";
    	}
    }
    

    在这里插入图片描述

    由上图可知,基本数据类型中会存在两个相同的1,而引用型类型就不会存在相同的数据.
    假如"hello"的引用地址是xxxxx1,声明str变量并其赋值"hello"实际上就是让str变量引用了"hello"的内存地址,这个内存地址就存储在堆内存中,是不会改变的,当再次声明变量str1也是赋值为"hello"时,此时就会在堆内存中查询是否有"hello"这个地址,如果堆内存中已经存在这个地址了,就不会再次创建了,而是让str1变量也指向xxxxx1这个地址,如果没有的话,就会重新创建一个地址给str1变量.

    三、从使用方面来说
    1,基本数据类型:判断数据是否相等,用==和!=判断
    2,引用数据类型:判断数据是否相等,用equals()方法,==和!=是比较数值的.而equals()方法是比较内存地址的.

    个人选择数据类型原则

    1. 如果要表示整数就使用int,表示小数就使用double;
    2. 如果要描述日期时间数字或者表示文件(或内存)大小用long;
    3. 如果要实现内容传递或者编码转换使用byte;
    4. 如果要实现逻辑的控制,可以使用booleam;
    5. 如果要使用中文,使用char避免中文乱码;
    6. 如果按照保存范围:byte < int < long < double;

    两者之间的转化

    1,String到基本数据类型的转化,使用parseXXX();
    例如:String到int

    String s="12";
    int s1 = Integer.parseInt(s);
    

    2,基本数据类型到String的转化,使用相对应类封装好的方法,具体方法查看API.点击查看API
    例如:int到String

    int a = 21; 
    String b = String.valueOf(a);
    
    展开全文
  • golang值类型与引用类型的区别

    千次阅读 2020-01-10 20:51:44
    1、golang值类型与引用类型的区别 1.1 本质存储区别 值类型与引用类型的区别主要在于: 值类型的变量: 存储当前类型的存储的数据。值类型包括数值类型、bool、string、数组、struct结构体 引用类型的变量:存储...

    1、golang值类型与引用类型的区别

    1.1 本质存储区别

    值类型与引用类型的区别主要在于:

    • 值类型的变量: 存储当前类型的存储的数据。值类型包括数值类型、bool、string、数组、struct结构体
    • 引用类型的变量:存储地址,该地址对应的空间才是真正存储的数据。引用类型包括:指针、slice切片、管道chan、map、以及interface等类型。

    注意:golang中的引用类型和值类型的区别与C++中的指针类型和值类型的区别类似。而C++中的引用类型与golang中的引用类型不是同一个概念。

    1.2 使用区别

    • 值类型:声明变量之后可以直接使用
    • 引用类型:对于引用类型,若使用var进行声明变量,必须使用make函数对其进行分配内存。若不初始化,该变量默认值为nil,向其添加元素时会导致panic。

    2、示例验证

    我们可以通过下面的小程序来验证上述的想法:

    • 对于int类型的a,将其转换为地址进行打印,结果打印表示错误类型,不是地址类型.a:%!p
    • 对于map类型b,将其转换为地址打印可看出其存储的为指针类型且为0xc000078150,将其传入函数中,该函数接受的参数值也为该变量存储的地址值test:0xc000078150。
    package main
    
    import "fmt"
    
    func test(test map[string]string) {
        // test:0xc000078150
    	fmt.Printf("test:%p\n", test)
    	// &test:0xc000098028
    	fmt.Printf("&test:%p\n", &test)
    }
    
    func main() {
    	a := 10
    	// a:%!p(int=10)
    	fmt.Printf("a:%p\n", a)
    	// &a:0xc000096010
    	fmt.Printf("&a:%p\n", &a)
    
    	b := map[string]string{}
    	// b:0xc000078150
    	fmt.Printf("b:%p\n", b)
    	// &b:0xc000098020
    	fmt.Printf("&b:%p\n", &b)
    	test(b)
    }
    
    展开全文
  • java中四种引用类型

    千次阅读 2015-08-27 11:42:50
    今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混。后来在网上查资料,感觉收获颇多,现记录如下。对象的强、软、弱和虚引用...
  • JavaScript数据类型,包括原始类型和引用类型有哪些? 原始类型有五个 Number类型 专门保存数字的类型,可用于进行数学计算等的数值 String类型 专门用来保存字符串的类型;” “,用来存储字符串类型的文本. ...
  • Java基本类型变量与引用类型变量

    千次阅读 2021-03-06 15:41:26
    相应地,变量也有两类型:基本类型与引用类型。Java的8中基本类型的变量称为基本类型变量,而类、接口和数组变量时引用类型变量。这两类型变量的结构和含义不同,系统对他们的处理也不相同。1.基本类型与引用...
  • java基本类型与引用类型

    万次阅读 多人点赞 2018-01-04 17:30:32
    java基本类型与引用类型 目录 java基本类型与引用类型 目录 一基本数据类型 二引用类型 三基本类型与引用类型的区别 默认值 内存分配 自动装箱自动拆箱 自动装箱拆箱带来的问题 程序的性能 空指针异常 ...
  • 2007-07-01VB问题VB有数据类型?每数据类型所占的字节数分别是多少?列举每数据类型的实例。1Boolean数据类型Boolean 变量存储为 16 位(2 个字节)的数值形式,但只能是 True 或是 False。Boolean 变量的值...
  • C#详解值类型和引用类型区别

    万次阅读 多人点赞 2016-04-20 17:59:42
    首先,什么是值类型,什么是引用类型? 在C#中值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。 值类型(value type):byte,short,int,long,float,double,decimal,...
  • 理解Java自定义类作为数据类型——引用数据类型

    千次阅读 多人点赞 2020-01-11 20:01:48
    前言:Java的数据类型按照类型可分为基本数据类型(byte、short、int、long、double、float、char、boolean)和引用数据类型(类(class)、接口(interface)、数组(array)),8基本数据类型相信只要接触过Java就...
  • Java四种引用类型

    万次阅读 多人点赞 2019-05-12 19:01:34
    文章目录引用类型简介对象可达性判断GC Roots对象可达性判断可达性状态类型可达性判断规则状态转换Reference类定义状态变化四种引用类型实现强引用FinalReference软引用SoftReference弱引用WeakReference虚引用...
  • 什么是值类型,什么是引用类型

    千次阅读 2021-05-12 20:01:43
    概念:值类型直接存储其值,而引用类型存储对其值的引用。部署:托管堆上部署了所有引用类型引用类型:基类为Objcet 值类型:均隐式派生自System.ValueType: 值类型: byte,short,int,...
  • JS基本数据类型引用数据类型

    千次阅读 2022-04-04 15:48:33
    JavaScript中的数据类型分为基本数据类型和引用数据类型,那么哪些是基本类型,哪些是引用类型,以及它们的区别是什么呢? 基本数据类型 基本数据类型共有6,包括String、Number、Boolean、Null、undefined以及...
  • C#引用类型

    千次阅读 2021-07-06 17:14:56
    概念:引用类型存储对其值的引用。部署:托管堆上部署了所有引用类型引用类型:基类为Objcet 引用类型: string 和 class统称为引用类型引用类型当声明一个类时,只在栈中分配一...
  • Swift 值类型和引用类型

    千次阅读 2018-03-13 09:28:21
    Swift中有两类型:值类型(Value Type),引用类型(Reference Type)。1. 值类型在Swift中,所有的基本类型:整型(Int)、浮点型(Float)、布尔类型(Boolean)、字符串类型(String)、数组(Array)、字典...
  • java数据类型(八基本数据类型+三种引用类型

    万次阅读 多人点赞 2017-02-08 11:05:32
    2引用数据类型 二:注意事项: 1:java开发过程中整型用int、小数用double、布尔用boolean; 2:类型转换都是小范围向大范围转换,大范围往小范围转化需要用到强制转换;  例如:(1)int a=12;double b=a;(2...
  • C# 值类型和引用类型的区别

    千次阅读 2022-03-05 11:56:40
    常见的值类型和引用类型可参考下面这个表格: 注:C# 的 struct 是值类型,这个很容易被忽略。 内存中的存储方式 值类型和引用类型最大的区别,就是它们在内存中的存储方式不同。 也许在很多地方你会看到这么一句话...
  • String的到底是基本数据类型还是引用数据类型

    千次阅读 多人点赞 2019-06-29 09:45:37
    关于String为值类型还是引用类型的讨论一直没有平息,最近一直在研究性能方面的问题,今天再次将此问题进行一次明确。希望能给大家带来点帮助。 如果有错误请指出。 来看下面例子: 复制代码 复制代码 //值类型 int ...
  • 基本数据类型和引用数据类型的区别 Java中的数据类型分为两大类,基本数据类型和引用数据类型。...例如,String类型就是引用类型。 简单来说,所有的非基本数据类型都是引用数据类型。 1. 基本数据类型
  • Java引用类型的强制类型转换

    千次阅读 2018-07-22 22:30:10
    正如有时候需要将浮点型的... 编写Java程序时,引用类型只能调用声明该变量的类型的方法,也就是编译时类型的方法,不允许调用运行时类型所定义的方法,即使它实际所引用的对象包含该方法。解释一下就是我们说的...
  • Java 基本类型与引用类型

    千次阅读 多人点赞 2019-03-27 20:55:51
    Java 基本类型与引用类型 一、基本数据类型 java 中一共分为 8 基本数据类型:byte、short、int、long、float、double、char、boolean, 其中 byte、short、int、long 是整型。float、double 是浮点型,char 是...
  • Java 基本数据类型与引用类型 变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。 因此,通过...
  • Java中的四种引用类型是哪些?

    千次阅读 2020-07-01 23:10:51
    从一开始学习Java我们就知道Java的数据类型一般有两,一是基本数据类型,另一是引用...Java中主要包括了四种引用类型,分别是:强引用,软引用,弱引用以及虚引用。 一、强引用 强引用是一最常见的引用形式,
  • java中引用数据类型有哪些?

    万次阅读 多人点赞 2016-07-18 09:45:37
    Java中有俩数据类型,其中主要有8中基本数据类型引用数据类型,除了8中基本数据类型以外都是引用数据类型,8中基本数据类型分别是byte,short,int,long,char,boolean,float,double,具体如下:1、boolean:数据值...
  • Golang的4传递引用类型

    千次阅读 2019-10-11 10:36:42
    Go语言有4中类型是传递引用的,这在赋值或者作为函数传参数时,都是浅拷贝,分别是: interface slice map chan 下面给出代码详细说明: package main import "fmt" type Foo interface { foo() setName...
  • c#中的值类型和引用类型

    千次阅读 2019-02-03 15:43:04
    值类型和引用类型,是c#比较基础,但是也必须掌握的知识点,但是也不是那么轻易就能掌握,今天让我们一起来看看。 &amp;nbsp; 典型类型 首先我们看看这两不同的类型有哪些比较典型的代表。 &amp;nbsp; ...
  • Java四种引用类型 1.引用的基本概念 强引用:当我们使用new创建对象时,被创建的对象就是强引用,如Object object = new Object(),其中的object就是一个强引用了。如果一个对象具有强引用,JVM就不会去GC它,JVM...
  • 基本类型和引用类型区别

    千次阅读 2018-06-01 14:30:53
    相应的,变量也有两类型:基本类型和引用类型。 基本类型的变量保存原始值,即它代表的值就是数值本身; 而引用类型的变量保存引用值,"引用值"指向内存空间的地址,代表了某个对象的引用,而不是对象...
  • 一、什么是值类型,什么是引用类型 概念:值类型直接存储其值,而引用类型存储对其值的引用。部署:托管堆上部署了所有引用类型引用类型:基类为Objcet 值类型:均隐式派生自System.ValueType: 值类型...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,101,711
精华内容 440,684
关键字:

下面哪种类型不是引用类型