-
C++中指针和引用有两种类型:静态类型和动态类型
2018-02-11 23:14:52C++中指针和引用有两种类型:静态类型和动态类型静态类型:指针或引用声明时的类型动态类型:运行时实际指向的对象类型class A{};class B : public A{};A *p1 = NULL;//p1的静态类型是 A*p1 = new B; //p1的动态类型...C++中指针和引用有两种类型:静态类型和动态类型
静态类型:指针或引用声明时的类型
动态类型:运行时实际指向的对象类型
class A
{
};
class B : public A
{
};
A *p1 = NULL;//p1的静态类型是 A*
p1 = new B; //p1的动态类型是B*
B *p2 = NULL;//p2的静态类型是B*
p2 = new B; //p2的动态类型是 B* -
C#的两种数据类型:值类型,引用类型
2018-12-28 11:44:58C#的两种数据类型:值类型,引用类型 值类型: byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。 1. 值类型变量声明后,不管是否赋值,编译器都给它分配内存。 2. ...C#的两种数据类型:值类型,引用类型
值类型: byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。 1. 值类型变量声明后,不管是否赋值,编译器都给它分配内存。 2. 值类型的实例通常是在线程栈上分配的(静态分配),但是在某些情形下可以存储在堆中。 3. 值类型在栈内分配空间大小因变量类型而异。 引用类型: string 和 class统称为引用类型。 1. 引用类型声明时,只在栈中分配一小片内存用于容纳一个地址,而此时并没有为其分配堆上的内存空间。 当使用 new 创建一个类的实例时,分配堆上的空间,并把堆上空间的地址保存到栈上分配的小片空间中。 2. 引用类型的对象一定是在堆空间中分配(动态分配)。 3. 引用类型在栈内的空间大小相同。 代码注解:
-
Java 引用变量的两种类型 【多态相关】
2017-11-13 21:25:46引用变量的两种类型: 编译时类型(模糊一点,一般是一个父类) 由声明时的类型决定。 运行时类型(运行时,具体是哪个子类就是哪个子类) 由实际对应的对象类型决定。 通过动态绑定调用该对象的方法。...引用变量的两种类型:
编译时类型(模糊一点,一般是一个父类)
由声明时的类型决定。
运行时类型(运行时,具体是哪个子类就是哪个子类)
由实际对应的对象类型决定。
通过动态绑定调用该对象的方法。动态绑定会使我们的程序编写更加灵活,但是会减慢程序运行速度。这也是JAVA比C++/C慢的主要原因之一。
-
JS中的两种数据类型以及实现引用类型的深拷贝
2018-04-20 13:26:501.两种数据类型我们知道,在JS中数据类型按照访问方式和存储方式的不同可分为基本类型和引用类型。2.基本类型基本类型有String、Boolean、Number,Undefined、Null,这些基本类型都是按值传递的,也称为值类型。3....1.两种数据类型
我们知道,在JS中数据类型按照访问方式和存储方式的不同可分为基本类型和引用类型。
2.基本类型
基本类型有String、Boolean、Number,Undefined、Null,这些基本类型都是按值传递的,也称为值类型。
3.引用类型
引用类型有对象、数组、函数,它们都是按引用访问的。
4.两者区别
基本类型和引用类型由于两者在内存中存储的方式不同,造成两者访问的方式也不同。其中,基本类型存储在内存的栈中,是按值访问;引用类型存储在内存的堆中,是按引用访问。可如下图所示:
当有
var n1 = 10; var n2 = 10; var arr1 = [1,2,3,4] var arr2 = [1,2,3,4]
其在内存中存储方式如图:
值类型是在栈中直接保存的变量的实际值,而引用类型在栈中仅仅保存的是变量指向堆中的地址,从上图中可以看出,值类型的变量n1和n2都是10,但是在栈中却为这两个变量分别开辟了两块空间来存储,而引用类型的变量arr1和arr2也相同,但是在堆中仅仅开辟了一块内存来存储,而在栈中存储的是这两个变量指向堆中的地址,这两个变量都指向堆中的同一片地址。
5.拷贝上的区别
正是由于两者在存储方式上的不同,造成了两者在拷贝时的差异。首先,先看两段代码:
var n1 = 10; //将n1拷贝给n2 var n2 = n1; n1 = 12; console.log(n1); console.log(n2);
先定义变量n1=10,然后将n1拷贝给n2,再接着改变n1的值为12,分别打印n1和n2的值,打印结果为:
从结果中我们可以看到,n1变为12了,但是n2不受影响,依旧是10。
再看另外一段代码:
先定义数组arr1,然后将arr1拷贝给arr2,再接着向arr1中尾部追加一个元素,分别打印arr1和arr2的值,打印结果为:var arr1 = [1,2,3,4] //将arr1拷贝给arr2 var arr2 = arr1; //向arr1中尾部添加一个元素5 arr1.push(5); console.log(arr1); console.log(arr2);
从结果中我们可以看到:我们先将arr1拷贝给了arr2,但是当我们改变arr1时,arr2也跟着一起改变了。这印证了前文所说的,arr1和arr2实际上是指向了内存中的同一片地址,当arr1发生变化时,实际上是将指向的这片内存地址中的数据变化了,而arr2也指向的是这片地址,所以arr2也会跟着变化。
上面代码中的arr2=arr1,就是我们俗称的浅拷贝,浅拷贝仅仅拷贝的是变量名,其在内存的存储没有被拷贝,指向的还是同一片内存地址,这就是造成了一个变化另外一个也跟着变化,这在日常开发中不是我们想要的。
那如何实现真正的拷贝呢?
6.深拷贝
真正的拷贝,就是拷贝过后,arr1和arr2指向的不再是同一片内存地址,而是分别指向各自的地址,这样发生变化的时候就不会出现同时变化,这就是深拷贝。
下面我们封装一个深拷贝函数,来实现引用类型的深拷贝:
//参数p为原对象 //参数c为原对象的类型,若原对象为数组,则传入c为[],若原对象是对象传入c为{},也可不传默认为{} function deepCopy(p,c){ var c = c || {}; for(var i in p){ if(typeof p[i] === "object"){ c[i] = (p[i].constructor === Array)?[]:{}; deepCopy(p[i],c[i]) }else{ c[i] = p[i] } } return c; }
7.测试
//参数p为原对象 //参数c为原对象的类型,若原对象为数组,则传入c为[],若原对象是对象传入c为{},也可不传默认为{} function deepCopy(p,c){ var c = c || {}; for(var i in p){ if(typeof p[i] === "object"){ c[i] = (p[i].constructor === Array)?[]:{}; deepCopy(p[i],c[i]) }else{ c[i] = p[i] } } return c; } //定义数组arr1 var arr1 = [1,2,3,4] //将arr1拷贝给arr2 var arr2 = deepCopy(arr1,[]); //向arr1中尾部添加一个元素5 arr1.push(5); console.log('arr1:',arr1); console.log('arr2:',arr2);
测试结果:
结果中可以看到,arr1变化没有引起arr2的变化,实现了真正的拷贝。
完。
-
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)
2014-10-20 23:44:03Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。另外,Java 还为每个原始类型提供了封装类(Wrapper)。 如果需要一个整型变量,是使用基本的 int 型呢,还是使用 Integer 类的一个对象呢?如果... -
C#两种数据类型:值类型和引用类型
2019-04-30 11:11:28概念:值类型直接存储其值,而引用类型存储对其值的引用。 值类型: byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。 引用类型: string 和 class统称为... -
C#中的两种数据类型---值类型和引用类型
2013-08-07 16:25:33我们都知道,c#的两大数据类型分别为值类型(int,float,double,char,DataTime)和引用类型(类、托管、数组和接口)。很多人或许闭着眼睛都能说出值类型包括简单类型、结构体类型和枚举类型,引用类型包括自定义类、数组... -
js变量存在的两种类型(原始值,引用值)
2017-03-08 20:53:20js变量存在的两种类型(原始值,引用值) 由于最近面试问到过这个问题,所以特定补一下这里面的知识: 原始值类型:Undefined、Null、Boolean、Number 和 String 型;存储在栈(stack)中的简单数据段,也就是说,... -
ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值。
2016-11-21 10:28:58ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是 简单的数据段,而引用类型值指那些可能由多个值构成的对象。 -
四种类型的引用
2016-08-06 15:13:38从Java SE2开始,就提供了四种类型的引用:强引用、软引用、弱引用和虚引用。Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于JVM进行垃圾回收。 -
c#中的两种数据类型--值类型和引用类型
2008-10-18 20:21:00我们都知道,c#的两大数据类型分别为值类型和引用类型。很多人或许闭着眼睛都能说出值类型包括简单类型、结构体类型和枚举类型,引用类型包括自定义类、数组、接口、委托等,但是当被问及到二者之间的联系和区别,... -
Java的数据类型分为(两大类):(8种)基本数据类型、(3种)引用类型
2020-07-05 22:16:36Java的数据类型分为(两大类):基本数据类型、引用类型 一、基本数据类型:是进行内容的操作,而不是进行内存的操作; Java数据类型(八大基本数据类型):六种数字类型(四个整数型,两个浮点型),一 种字符类型... -
java中的引用类型概念和String两种实例化方式的区别
2017-03-02 13:40:38引用类型(reference type)指向一个对象,不是原始值,指向对象的变量是引用变量。 在java里面除去基本数据类型的其它类型都是引用数据类型,自己定义的class类都是引用类型,可以像基本类型一样使用。 ... -
Java中引用类型、对象数组的两种定义方法
2019-07-17 23:02:22所谓的对象数组,就是指包含了一组相关的对象,但是在对象数组的使用中一定要清楚一点:数组一定要先开辟空间,但是因为其是引用数据类型,所以数组里面的每一个对象都是null值,则在使用的时候数组中的每一个对象... -
C#的两种数据类型
2018-03-06 17:15:00值类型是直接存储他的数据内容,而引用类型存储的是对象的引用,这两种类型对变量赋值存在着不同的含义。 值类型包括:简单类型,结构类型,枚举类型, 引用类型包括:Object类型,类类型,借口类型,代表元 ... -
了解Java的4种引用类型
2015-03-23 11:59:51Java引用类型Java中有两种类型,值类型和引用类型。其中引用类型有点类似指针,它保存着对象的地址。通过引用,可以对堆中的对象进行操作。《深入理解Java虚拟机 JVM高级特性与最佳实践》一书3.2.3节中对引用有如下... -
Java中的四种引用类型是哪些?
2020-07-01 23:10:51从一开始学习Java我们就知道Java的数据类型一般有两种,一种是基本数据类型,另一种是引用数据类型。其中,基本数据类型的值通常储存在栈内存中,用于对该类型的对象进行存储;而引用数据类型则在存储堆中对需要引用... -
Java的两种数据类型
2020-08-25 21:07:50Java的两种数据类型 1.基本数据类型 八种 类型 byte short int long float double boolean char 2.引用数据类型 java中所有的class都是引用数据类型 sun公司提供的:System.class,String.... -
【怎样写代码】小技巧 -- 关于引用类型的两种转换方式
2017-06-04 14:33:00如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to ... -
变量的两种不同类型
2019-09-26 23:01:58变量可能包含两种不同数据类型的值:基本类型值和引用类型值。 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。 在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型... -
Java 的8种基本类型和3种引用类型
2017-05-18 11:21:511、计算机的内存单位 计算机中的数据都是以 0 和 1 来表示的,其中一个 0 或者一个 1 称之为一位 (bit)。 8位称为一个字节 (Byte),两个字节称为一个字 (Word) ,四个字节...2、Java 有四类8种基本类型 a、4... -
数据类型 Java语言支持的数据类型分为两类:基本数据类型和引用类型
2020-02-11 22:58:371、基本数据类型共8种,分为布尔类型(boolean)和数值类型,数值类型又分为整数类型和浮点类型。...引用数据类型就是对一个对象的引用,对象包括实例和数组两种。空类型(null)就是null值类型,这种类型没有... -
符合类型(引用,指针)的两种不同形式的定义
2007-01-11 10:14:00符合类型(引用,指针)//数组是否属于 的两种不同形式的定义: int a = 10;定义一个指针: int *p = &a; int (*pp) = &a;定义一个引用: int &ra = a; int (&rra) = a;2。而且变量定义语句的识别优先于函数... -
JS的两种数据类型
2019-07-02 11:16:57JS分两种数据类型: 基本数据类型:Number、String、Boolean、Null、 Undefined、Symbol(ES6),这些类型可以直接操作保存在变量中的实际值。 引用数据类型:Object(在JS中除了基本数据类型以外的都是对象,... -
C#中的两种类型
2008-01-14 19:29:00C#中有两种类型1.值类型(value type)2.引用类型(reference type)值类型的变量直接包括他们的数据,而引用类型的变量存储对它们的数据的引用,后者称为对象. 值类型:简单类型(simple type) , 枚举类型(enum type) 和... -
两种数据类型的内存
2015-04-23 14:21:23基本类型(primitive types),基本类型共有8种,即int, short, long, byte, float, double, boolean, char(注意,并没有string的基本类型)。这种类型的定义是通过诸如int a = 3; long b = 255L;的形式来定义的,称为... -
引用类型引用类型
2019-02-02 15:12:37在JavaScript中引用类型是一种数据结构,将数据和功能组织在一起,...一般创建对象有两种方法,一个是new一个构造函数(任意一个普通函数用于创建一类对象时,它就被称作构造函数,或构造器),另一个就是对象字面...