-
js 中的值类型和引用类型是什么有什么区别
2020-08-27 15:42:161、 javascript中变量类型分为值类型(基本数据类型)和引用类型 值类型:String(字符串),Number(数值),Boolean(布尔...引用类型占用空间不固定,保存在堆中,保存与复制的是指向对象的一个指针,需要使用 instanceof1、 javascript中变量类型分为值类型(基本数据类型)和引用类型
值类型:String(字符串),Number(数值),Boolean(布尔值),Undefined,Null
引用类型:Array(数组),Object(对象),Function(函数)2、 值类型和引用类型的区别
(1) 存储位置不一样
值类型占用空间固定,保存在栈中,保存与复制的是值本身,可以使用 typeOf()检测值的类型.
引用类型占用空间不固定,保存在堆中,保存与复制的是指向对象的一个指针,需要使用 instanceof() 检测数据类型,使用 new() 方法构造出的对象是引用型.(2) 复制方式不一样
值类型的变量直接赋值就是深复制,如 var a = 10; var b = a;那么a的值就复制给b了,b修改值不会影响a,两份数据在内存中是完全独立的。
引用类型的变量直接赋值实际上是传递引用,只是浅复制.是将变量中的存储的地址赋值一份单独存储,但是两个变量中修改其中一个对象,另外一个引用来访问的时候,也会访问到修改后的值。(3) 值类型无法添加属性和方法,引用类型可以添加属性和方法。
(4) 值类型的比较是值的比较,只有当它们的值相等的时候它们才相等。引用类型的比较是引用地址的比较
比较的时候注意双等号在做比较的时候做了类型转换,而全等号是值和类型相等是才能相等.(5) 在函数中的使用
// 值类型 var num = 10; function print(num) { num = 100; console.log(num); // 100 } console.log(num); // 10 // 引用类型 var obj = { name: 'jone' } function printObj(obj) { obj.name = 'lucy'; console.log(JSON.stringify(obj)); // {"name":"lucy"} } console.log(JSON.stringify(obj)); // {"name":"lucy"}
值类型变量在函数中被修改时只在函数作用域内部生效,当函数被销毁时此次修改立即失效;而引用类型在函数中被修改时修改的是运行时数据区中的值,即使函数被销毁,变量的值依旧被改变。
-
Java内存管理之引用类型是什么?都有哪几种引用类型?(按照引用强度划分)
2018-12-02 02:04:31文章目录引用类型(按引用强度划分)Java的四种引用类型1. 强引用(Strong Reference)2.软引用(Soft Reference)3. 弱引用(Weak Reference)4. 虚引用(Phantom Reference)5. 总结 引用类型(按引用强度划分) ...文章目录
引用类型(按引用强度划分)
从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。
Java的四种引用类型
- strongreference
- softreference
- weakreference
- phantomreference
这四种引用的强度按照上面的顺序依次减弱。
1. 强引用(Strong Reference)
Object obj = new Object() 这类引用。
只要强引用还存在,垃圾收集器就永远不会回收掉被引用的对象。
2.软引用(Soft Reference)
用SoftReference类来关联引用对象,SoftReference sr = new SoftReference(new String(“hello”));
用来描述一些还有用,但并非必需的对象。对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中并进行第二次回收。如果这次回收还是没有足够的内存,才会抛出内存溢出异常。
3. 弱引用(Weak Reference)
用WeakReference类来关联引用对象,WeakReference sr = new WeakReference(new String(“hello”));
也是用来描述非必需对象的,但是它的强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾收集发生之前。当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。
4. 虚引用(Phantom Reference)
是最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。为一个对象设置虚引用关联的唯一目的就是希望能在这个对象被收集器回收时收到一个系统通知。
5. 总结
被软引用关联的对象只有在内存不足时才会被回收,而被弱引用关联的对象在JVM进行垃圾回收时总会被回收。针对上面的特性,软引用适合用来进行缓存,当内存不够时能让JVM回收内存,弱引用能用来在回调函数中防止内存泄露。
-
什么是值类型 什么是引用类型
2007-06-19 08:36:00值类型,传值, 不改变实参的值.引用类型是传地址, 改变实参的值 .字符串是引用类型.值类型用 栈存储 引用类型 用 堆存储值类型,传值, 不改变实参的值.
引用类型是传地址, 改变实参的值 .字符串是引用类型.
值类型用 栈存储
引用类型 用 堆存储 -
为什么string是引用类型
2019-11-21 16:19:03在c#中分为值类型和引用类型,值类型为int ,float ,bool ,...为什么string为引用类型呢?首先明白string指向常量空间的地址。 如果我们有一个字符串 string a="abcde"; 我们用a给其他字符串赋值:string b=a,c=a...在c#中分为值类型和引用类型,值类型为int ,float ,bool ,char ,struct等简单数据类型,引用类型有stirng,class。
然而string的身为引用类型却表现得与值类型十分相同。为什么string为引用类型呢?首先明白string指向常量空间的地址。
如果我们有一个字符串 string a="abcde";
我们用a给其他字符串赋值:string b=a,c=a,d=a;
那么这样子我们就得到了4个一模一样的字符串"abcde"。a b c d都是指向同一块地址。
可是既然string是引用类型,那么a ,b ,c ,d 代表的都是同一个字符串,如果我改变其中一个字符串a="1234",另外的三个由于指向的都是同一个字符串,其他三个也应该是"1234"。但是事实上并不是这样子的,另外三个的值依旧是”abcde“。这样子的话string还能叫做引用类型吗?
答案是string当然是个引用类型。
由于其他三个字符串我们使用 a 去赋值,在a ,b , c , d ,指向的都是同一块常量地址。但是常量是不能直接被改变的,因此我们不能通过直接修改字符串常量来达到我们修改字符串的目的,必须是开辟另一个常量空间存放新的字符常量,因此,当使用 a="1234"时,a指向的地址该变了,但是b,c,d还是指向原来的同一块空间。这种情况产生的现象使得string和值类型更改值时产生的现象一模一样(如:int k=10;int t=k;t=20;)
引用是一种别名,本质上是指向同一块地址,底层实现是通过指针。
-
什么是引用类型,什么是值类型
2012-12-01 15:46:38我知道他们的区别,值类型是直接储存数据,而引用类型是储存在其相应的内存上的位置, 我想知道他们的概念是什么 -
《javaScript高级程序设计》阅读:6-引用类型:什么是引用类型(类)?什么是对象?
2018-05-18 09:32:541、什么是引用类型? 引用类型通常被称作类(这个说法并不准确),有时候也被称作对象定义,因为它描述的是一类对象所具有的属性和方法。2、什么是对象? 其实对象就是某个特定引用类型的一个实例。新对象就是一个... -
string 为什么是引用类型
2017-07-10 10:59:29.Net 框架程序设计(修订版)中有这样一段描述:String类型...直接继承自Object的类型一定是引用类型,因为所有的值类型都继承自System.ValueType。值得 指出的是System.ValueType却是一个引用类型。)。 代码一: -
javascript中基本类型和引用类型的关系是什么?
2016-04-08 04:07:09他们是谁包含谁的关系,还是相互独立的关系? 为什么说Number 对象是 Number 原始类型的引用类型? -
值类型和引用类型之间的区别是什么?
2018-11-18 16:02:26声明一个值类型变量,编译器会在栈上分配一个空间,这个空间对应着该值类型变量,空间里存储的就是该变量的值。引用类型的实例分配在堆上,新建一个引用类型实例,得到...引用类型是存折,要用还得先去银行取现。 ... -
基本类型和引用类型
2018-05-21 11:13:50基本类型和引用类型。【概念】基本类型是什么... 引用类型是什么?它包含了多个数据段。例如,Array、Date 基础类型和引用的区别是什么?基础类型是按值访问,引用类型是按地址访问。 (以下内容持续更新中)如何... -
js之值类型和引用类型之间的区别是什么
2018-11-18 16:46:35从概念上看,值类型直接存储其值,而引用类型存储对其值的引用。这两种类型存储在内存的不同地方。...引用类型的实例分配在堆上,新建一个引用类型实例,得到的变量值对应的是该实例的内存分配地址。 ... -
什么是类型(值类型与引用类型)以及类型的作用,还有它的分类
2020-08-12 17:04:47什么是类型 类型又名数据类型 是一些性质相同的值 是数据在内存中存储时的“型号” 在内存中,占据多大的空间 编程语言的数据类型与数学中的不完全相同 c#的五大数据类型 ...类(classes):如...分为了引用类型和 -
C#引用类型和值类型区别是什么?
2013-05-08 14:42:43解析:CLR支持两种类型:值类型和引用类型。用Jeffrey Richter(《CLR via C#》作者)的话来说,“不理解引用类型和值类型区别的程序员将会把代码引入诡异的陷阱和诸多性能问题”。这就要求我们正确理解和使用值类型... -
在C#的数据类型中,什么属于值类型,什么属于引用类型
2018-03-21 20:45:00转自原文 在C#的数据类型中,什么属于值类型,什么属于引用类型 类型:整数,浮点数,高精度浮点数,布尔,字符,结构,枚举引用类型:对象(Object),字符串,类,接口,委托,数组除了值类型和引用类型,还有一... -
WEB前端学习五 js什么是引用类型
2018-06-04 11:42:00Number Boolean undefined Object Function String Null基本类型:Number Boolean String undefined null引用类型:Object Function基本类型的数据是存放在栈内存中的,而引用类型的数据是存放在堆内存中的复制变量... -
java数组元素类型为基本数据类型和引用类型有什么不同?
2020-10-03 16:57:52java数组元素类型为基本数据类型和引用类型有什么不同? 对于基本类型数组而言,数组元素的值直接存储在对应的数组元素中,因此,初始化数组时,先为该数组分配内存空间,然后直接将数组元素的值存入对应数组元素中... -
值类型和引用类型的最基本的区别是什么?
2010-11-22 10:19:00C#将类型分为两类,一类是值类型,另一类是引用类型。大部分固有的基本类型(如整型,浮点型)是值类型,结构类型也是值类型。引用类型包括类、接口、数组和字符串。基本的概念非常简单,那就是一个值类型的... -
Java值类型和引用类型,以及复制的是什么东西
2017-11-02 21:30:57JavaScript值类型和引用类型有哪些 (1)值类型:数值、布尔值、null、undefined。 (2)引用类型:对象、数组、函数。 四、如何理解值类型和引用类型及举例 我们可以用“连锁店”和“连锁店钥匙”... -
在C#中值类型和引用类型有什么区别?
2018-04-07 11:08:05c#中提供的数据类型有两类,值类型和引用类型。 概念上,值类型,直接存储其值;引用类型,存储对其值的引用。 内存空间上,值类型在栈中操作;引用类型在堆中分配存储单元。 其中对于栈和堆的理解参考知乎。 ... -
JS中基本类型和引用类型分别指的的是什么?有何区别?
2019-10-23 14:58:56基本类型和引用类型 ECMAScript包含两个不同类型的值:基本类型值和引用类型值。 基本类型值指的是简单的数据段; 引用类型值指由多个值构成的对象。 在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是... -
为什么引用类型string的行为却是值类型
2012-08-13 08:40:14为什么引用类型string的行为却是值类型 分类: C#2012-03-02 11:2464人阅读评论(0)收藏举报 首先,我们需要知道string的如下特性: 1.字符串做参数,传递的是引用,只是一个指针的复制,你修改参数的... -
一直不太懂值类型与引用类型,以及string为什么是引用类型,做几个题就知道了。
2018-07-12 15:47:56结构类型,枚举类型都是值类型;类,字符串,委托都是引用类型。 int a = 1; int b = a; a = 2; Console.WriteLine("a:{0};b:{1}", a, b);//a:2;b:1 string aa = "123"; ... -
JS引用类型在隐式类型转换时到底做了什么
2021-03-01 00:29:101 前言 ...引用类型在转换成基本数据类型时,一般都是引用类型转换成基本数据类型,再进行比较 转换的目的只有一个:得到基本数据类型,或者说原始值 引用数据类型在转换时一般会用到两个API: valueOf -
什么是自动拆装箱?引用数据类型和基本数据类型都有什么?
2020-07-22 22:27:20基本数据类型(8种): 4 整型 byte(字节型) short(短整型) int(整型)...引用数据类型 数组[] 类class(抽象类 abstract class) 接口 interface 枚举 enum 注解 @interface 包装类是Java编译器在基本数据... -
值类型和引用类型,以及什么时候发生装箱和拆箱
2020-07-04 09:22:19值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,值类型的变量直接存储数据,而引用类型的变量存储的是内存地址的引用,当值类型转换成引用类型时发生装箱,当引用类型转换成值类型时发生拆箱。 ... -
C++拷贝构造函数 参数类型为什么是引用类型 ...
2016-09-09 10:11:59拷贝构造函数 写成如下的几种方式CExample(CExample ex){} // 直接编译错误,不允许为CExample类型CExample(CExample &ex){} // 是拷贝构造函数CExample(const CExample &ex){} // 是拷贝构造函数CExample(const ... -
引用类型必须与其引用对象的类型一致的第二个例外是什么?
2016-05-13 06:45:05《C++ Primer》第五版,中文版。p55。 好像只有一种。56 页又提到了一次两个例外,但是用的还是第一种。 -
引用类型
2015-07-27 22:28:411、什么是引用类型引用类型(reference type)指向一个对象,不是原始值,指向对象的变量是引用变量。在java里面除去基本数据类型的其它类型都是引用数据类型,自己定义的class类都是引用类型,可以像基本类型一样...