精华内容
下载资源
问答
  • 引用类型数组

    千次阅读 2019-03-11 19:48:26
    什么叫引用类型数组? 基本类型数组的元素中放的都是基本数据类型(int等)。 引用类型数组的元素中放的是从基本类型构造而来的类和其他复杂数据类型的地址。 两种类型数组的图解 基本类型数组:arr是引用,放在栈...

    什么叫引用类型数组
    基本类型数组的元素中放的都是基本数据类型(int等)。
    引用类型数组的元素中放的是从基本类型构造而来的类和其他复杂数据类型的地址

    两种类型数组的图解

    • 基本类型数组:arr是引用,放在栈内存中,new的部分属于对象,在堆内存中。arr里存的是对象的地址。
      在这里插入图片描述
    • 引用类型数组:
    1. 第一句话:stus是引用类型数组的变量(简称引用),存在栈内存,里面放的是对象实体的地址,new Student[3]在堆内存建立了一个Student[]数组对象实体,内部的元素都是存放的一个Student对象的引用,也就是对象的地址。
    2. 第二句话:在此之前仅仅是建立的一个由Student对象的引用所组成的数组,这些引用并没有指向某个地址,值为空,第二句话是在新建了一个Student对象,并把它的地址赋给stus[0]。

    在这里插入图片描述

    • 引用类型数组的赋值:
      类似基本类型数组的赋值方法,只是代码较多,看起来有些复杂
    //第一种:先定义数组,然后分别赋值
    Student[] stus = new Student[3]; //创建Student数组对象
    stus[0] = new Student("zhangsan",25,"LF"); //创建Student对象
    stus[1] = new Student("lisi",26,"JMS");
    stus[2] = new Student("wangwu",27,"SD");
    System.out.println(stus[0].name); //输出第1个学生的名字
    stus[1].age = 22; //给第2个学生的年龄赋值为22
    stus[2].sayHi();	//第3个学生和大家问好
    //第二种方法,声明的同时并赋值,注意中间是逗号
    Student[] stus = new Student[]{
          new Student("zhangsan",25,"LF"),
          new Student("lisi",26,"JMS"),
          new Student("wangwu",27,"SD")
        };
    
    展开全文
  • 采用分片的方法使得元组改变,属于“狸猫换太子”。元组是不可变的原则来说,单独删除一个元素是不可能的。... list set dict是可变的,属于引用类型 也可以通过id()函数显示出某一个变量在内存里的地址。 ...

    采用分片的方法使得元组改变,属于“狸猫换太子”。元组是不可变的原则来说,单独删除一个元素是不可能的。

    总结一下: int str tuple是不可变的,属于值类型。

                      list set dict是可变的,属于引用类型

    也可以通过 id()函数显示出某一个变量在内存里的地址。

    展开全文
  • java基本类型与引用类型

    万次阅读 多人点赞 2018-01-04 17:30:32
    java基本类型与引用类型 目录 java基本类型与引用类型 目录 一基本数据类型 二引用类型 三基本类型与引用类型的区别 默认值 内存分配 自动装箱自动拆箱 自动装箱拆箱带来的问题 程序的性能 空指针异常 ...

    java基本类型与引用类型


    目录

    一、基本数据类型

    java中一共分为8种基本数据类型:byte、short、int、long、float、double、char、boolean,其中byte、short、int、long是整型。float、double是浮点型,char是字符型,boolean是布尔型。

    二、引用类型

    java为每种基本类型都提供了对应的封装类型,分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean。引用类型是一种对象类型,它的值是指向内存空间的引用,就是地址。

    三、基本类型与引用类型的区别

    1.默认值

    整型byte、short、int、long的默认值都为0,浮点型float、double的默认值为0.0,boolean默认值为false,char默认值为空。对应的包装类型默认值都为null。

    2.内存分配

    基本数据类型的变量是存储在栈内存中,而引用类型变量存储在栈内存中,保存的是实际对象在堆内存中的地址,实际对象中保存这内容。

    3.自动装箱、自动拆箱

    Java从jdk1.5开始引入自动装箱和拆箱,使得基本数据类型与引用类型之间相互转换变得简单。

    自动装箱: java自动将原始类型转化为引用类型的过程,自动装箱时编译器会调用valueOf方法,将原始类型转化为对象类型。

    自动拆箱: java自动将引用类型转化为原始类型的过程,自动拆箱时编译器会调用intValue(),doubleValue()这类的方法将对象转换成原始类型值。

    自动装箱主要发生在两种情况:一种是赋值时,一种是方法调用时。
    a.赋值

    Integer a = 3; //自动装箱
    int b = a; //自动拆箱

    b.方法调用

    public Integer query(Integer a){
       return a;
    }
    query(3); //自动装箱
    int result = query(3); //自动拆箱

    4.自动装箱、拆箱带来的问题

    1.程序的性能

    由于装箱会隐式地创建对象创建,因此千万不要在一个循环中进行自动装箱的操作,下面就是一个循环中进行自动装箱的例子,会额外创建多余的对象,增加GC的压力,影响程序的性能:

    Integer sum = 0;
     for(int i=0; i<1000; i++){
       sum+=i;
    }

    2.空指针异常

    注意拆箱过程中可能产生的空指针异常,一个简单的例子:

    Object obj = null;
    int i = (Integer)obj;

    3.对象相等比较时

    先来看一个常见的例子:

    Integer a = 120;
    int b= 120;
    Integer c = 120;
    Integer d = new Integer(120);
    System.out.println(a == b);   //true    t1
    System.out.println(a == c);   //true    t2
    System.out.println(a == d);   //false   t3
    
    Integer e = 128;
    Integer f = 128;
    System.out.println(e == f);   //false    t4

    返回结果是不是出乎大家的意料,解释一下每种结果的原因:
    我们先反编译一下生成字节码:

    Integer a = Integer.valueOf(120);
    int b = 120;
    Integer c = Integer.valueOf(120);
    Integer d = new Integer(120);
    System.out.println(a.intValue() == b);
    System.out.println(a == c);
    System.out.println(a == d);
    
    Integer e = Integer.valueOf(127);
    Integer f = Integer.valueOf(127);
    System.out.println(e == f);
    
    Integer e1 = Integer.valueOf(128);
    Integer f1 = Integer.valueOf(128);
    System.out.println(e1 == f1);

    可以看到变量a、c在初始化的时候编译器调用了valueOf进行自动装箱,在a==b时对变量a调用了intValue()方法进行了自动拆箱操作,这就很好解释t1~t4的结果了。

    t1产生的原因是编译器编译时会调用intValue()自动的将a进行了拆箱,结果肯定是true;
    t2跟t4的结果比较难理解:这是因为初始化时,编译器会调用装箱类的valueOf()方法,查看jdk的源码:

    public static Integer valueOf(int i) {
        assert IntegerCache.high >= 127;
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

    发现jdk对-128~127之间的值做了缓存,对于-128~127之间的值会取缓存中的引用,通过缓存经常请求的值而显著提高空间和时间性能。
    这就能解释t2结果返回true,而t4由于128不在缓存区间内,编译器调用valueOf方法会重新创建新的对象,两个不同的对象返回false。

    t3结果无论如何都不会相等的,因为new Integer(120)构造器会创建新的对象。

    Byte、Short、Integer、Long、Char这几个装箱类的valueOf()方法都会做缓存,而Float、Double则不会,原因也很简单,因为byte、Short、integer、long、char在某个范围内的整数个数是有限的,但是float、double这两个浮点数却不是。

    展开全文
  • java中键值对数据类型属于引用数据类型吗,可以进行加减乘除操作吗
  • golang中的值类型和引用类型

    千次阅读 2019-08-20 20:48:29
    值类型与引用类型 值类型 值类型:这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中。当使用等号=将一个变量的值赋给另一个变量时,如 j = i ,实际上是在内存中将 i 的值进行了拷贝。可以通过 &...

    值类型与引用类型

    不管是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本身是一个字典的指针。

    展开全文
  • 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 是...
  • C#详解值类型和引用类型区别

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

    千次阅读 2017-09-11 16:34:21
    java 中的数据类型分为两大类:值类型(基本数据类型)和引用类型(复合数据类型) 一,值类型分为 1,整数类型(byte,short,int,long) 2,浮点类型(float,double) 3,布尔类型(boolean) 4,字符类型(char) 二,引用...
  • Java引用类型

    千次阅读 2016-03-16 19:12:55
    博主最近在整理Java集合框架时,在整理到WeakHashMap的时候,觉得有必要先阐述一下Java的引用类型,故此先整理的这篇文章,希望各位多提提意见。   闲话不多说,直接进入主题。Java中提供了4个级别的引用:强引用...
  • 值类型与引用类型

    千次阅读 2016-03-02 14:39:17
    1. 值类型和引用类型的区别? 2. 结构和类的区别? 3. delegate是引用类型还是值类型?enum、int[]和string呢? 4. 堆和栈的区别? 5. 什么情况下会在堆(栈)上分配数据?它们有性能上的区别吗? 6.“结构”...
  • C++ 引用类型

    千次阅读 2017-04-13 21:50:48
    引用类型:可以获得指针类型的效果,但是又可以避免指针可读性和可维护性差等问题。 1. 定义  &;  定义时要初始化  可以是除了void以外的任意C++类型。  如: int x=0; int &y=x;y=2;//此时x也是2 2. ...
  • C# - 值类型与引用类型

    万次阅读 2019-02-28 19:52:35
    分享一个大牛的人工智能教程。...因此,一个值类型变量永远不会影响到其他的值类型变量,而两个引用类型变量则很有可能指向同一地址,从而产生相互影响。 从内存分配上看,值类型分配在线程的栈上,作用...
  • C#中的DateTime是值类型还是引用类型

    千次阅读 2017-04-12 09:29:42
    近期遇到了DateTime到底是值类型还是引用类型的疑惑,顺势较深入地了解一下DateTime相关的内容 结论:DateTime是值类型,因为DateTime是结构体,而结构体继承自System.ValueType,属于值类型   一、DateTime是值...
  • 值类型和引用类型

    千次阅读 热门讨论 2019-01-02 20:18:16
    注:引用类型当声明一个类时,只在栈中分配一小片内存用于容纳一个地址,而此时并没有为其分配堆上的内存空间,当使用new 创建一个类的实例时,分配堆上的空间,并把堆上空间的地址保存到栈上分配的小片空间中。...
  • Java四种引用类型

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

    千次阅读 2016-03-25 13:04:33
    基本类型与引用类型
  • C#中值类型与引用类型的区别

    千次阅读 2018-09-28 12:09:01
    值类型是直接存储一个数值,而引用类型是存储对值的引用,这两种类型分别存储在不用的内存区域。而从内存上看,值类型是在栈中的操作,而引用类型是在堆中的操作。值类型是具体的那个数值所占用的空间大小,而引用...
  • Java引用数据类型String详解

    万次阅读 2020-07-02 23:54:44
    引用类型,都可以用null值作为值,也就是说可以在初始化的时候赋值为null,String是引用类型,也就是说可以使用null作为值。 引用数据类型与基本数据类型的差别(举例说明) 使用基本数据类型: int i1 = 1 int i2 ...
  • Swift 值类型和引用类型

    万次阅读 2014-08-20 16:58:08
    Swift中的类型分为两类:一,值类型(value types),每...二,引用类型(reference types),引用类型的实例共享它们的数据,通常是一个类。在这篇文章中我们将会探索值类型和引用类型的价值,以及如何在它们二者间抉择。
  • Java原始类型和引用类型

    千次阅读 2016-06-05 16:30:47
    在Java中提供了两种数据类型:原始类型和引用类型。 本文主要针对这两种类型进行说明,便于在实际开发过程中正确选择合适的数据类型。 1. 原始类型  Java中的原始类型是不同于类的基本数据类型,包括如下8种...
  • JAVA 四中引用类型

    万次阅读 2019-07-09 12:22:12
    常见的java引用有四种:强引用、软引用、弱引用、虚引用; 下面分别来介绍一下各种引用: 1、强引用 在Java 中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用...
  • C# 值类型与引用类型

    千次阅读 2018-07-19 14:31:09
    值类型与引用类型 只所以要提这两个概念,是因为很好得理解这两个概念有助于我们写出比较高效的C#代码。 我们知道,C#中的每一种类型要么是值类型,要么是引用类型。所以每个对象要么是值类型的实例,要么是引用...
  • Java引用类型有哪些

    万次阅读 2019-07-05 16:48:32
    其中,引用数据类型在存储堆中对需要引用的对象进行引用,引用是Java面向对象的一个特点,在Java入门中,我们会接触到四种Java的引用类型,接下来就说说这四种Java引用类型有哪些吧: 1、Java中有哪几种引用?...
  • C#中什么是值类型与引用类型? 值类型:struct、enum、int、float、char、bool、decimal 引用类型:class、delegate、interface、array、object、string
  • 基本类型和引用类型区别

    千次阅读 2018-06-01 14:30:53
    1.基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型。相应的,变量也有两种类型:基本类型和引用类型。 基本类型的变量保存原始值,即它代表的值就是数值本身; 而引用类型的变量...
  • java引用类型和基本类型的比较

    千次阅读 2017-07-18 23:37:24
    引用类型和基本类型的分类,不在写了,网上有很多。我们知道: 当两个基本类型使用”==”比较时,他们比较的是值。 当两个引用类型使用”==”比较时,他们比较的是地址。 当两个引用类型使用方法equals()比较时,...
  • C++引用类型

    千次阅读 多人点赞 2016-05-06 20:03:08
    C++引用类型 说到引用,先来讲一个故事:我们生活的院子里有这样一个小盆友,他的名字叫罗XX,我们喜欢给他起一个外号,看着他营养不太好,脑袋比较大、身子比较小,于是我们就给他起了一个叫“萝卜头”的外号。那么...
  • Go语言中的值类型和引用类型

    千次阅读 2018-05-04 20:50:10
    一、值类型和引用类型值类型:int、float、bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中。当使用等号=将一个变量的值赋给另一个变量时,如 j = i ,...
  • 除了四类八种基本类型外,所有的类型都称为引用类型(如:数组,类,接口,字符串) 值传递 基本数据类型赋值都属于值传递; 值传递传递的是实实在在的变量值,是传递原参数的拷贝,值传递后,实参传递给形...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,960,052
精华内容 784,020
关键字:

属于引用类型的是