首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

string 类型,还是引用类型(.net)

一. string 类型的用法比较像值类型 稍微有点.NET 编程知识的人都知道 string引用类型。我为什么还有此一问?因为string的使用非常像值类型。...因为值类型传递的具体的值,所以传入的参数形参,函数内部修改形参,不影响外部的变量。引用类型可不是这样,传递的引用不是值。所以函数内部的修改,会影响到外部。...二.string类型只读的引用类型,修改string对象会创建新的实例 到底string类型类型还是引用类型?答案当然引用类型。...,说明了string传递的引用,也就是指针(地址)。...看来似乎修改了 String 对象的方法实际上返回一个包含修改内容的新 String 对象。

1.6K10

String一个奇怪的引用类型

这个例子,string纯粹的引用类型,但是在函数传值时类似于值传递;我之前给前后示例的内存变化图吧: ? 根因就是大多数高级语言都把String设计成不可变的: 由一个字符串池管理字符串面值。...这个我还真的搜索了一下[1]: 总结起来: string 被设计为不可变, 是因为 string在现代任何语言中,使用很频繁:多个对象可能都是这个字符面值, 然后就设计一个Pool来存储string。...字符串不变性对于[在哈希表中使用字符串作为键]很友好,需要计算哈希值的对象必须不可变的,以确保哈希值不变。...一个有意思的现象是:String虽然引用类型,字符串对比时却表现的像值类型 string str1="FooFoo"; string strFoo="Foo"; string str2= strFoo...Span Span该出圈了, Span提供对内存连续区域的类型安全访问,该内存可以位于堆、堆栈、甚至是非托管内存; 与String不可变性相关的ReadOnlySpan(值类型), 提供内存数据的只读视图

63420
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    String一个奇怪的引用类型

    这个例子,string纯粹的引用类型,但是在函数传值时类似于值传递;我之前给前后示例的内存变化图吧: 根因就是大多数高级语言都把String设计成不可变的: 由一个字符串池管理字符串面值。...字符串不变性对于[在哈希表中使用字符串作为键]很友好,需要计算哈希值的对象必须不可变的,以确保哈希值不变。...一个有意思的现象是:String虽然引用类型,字符串对比时却表现的像值类型 string str1="FooFoo"; string strFoo="Foo"; string str2= strFoo...www.cnblogs.com"); Console.WriteLine(ss.ToString()); // ss打印结果为:222 Span Span该出圈了, Span提供对内存连续区域的类型安全访问...,该内存可以位于堆、堆栈、甚至是非托管内存; 与String不可变性相关的ReadOnlySpan(值类型), 提供内存数据的只读视图,每次切片不会产生新对象,而是在已存在的连续空间上创造新的视图。

    37130

    String值传递还是引用传递

    String值传递还是引用传递 今天上班时,同事发现了一个比较有意思的问题。他把一个String类型的参数传入方法,并在方法内改变了引用的值。...参数为基本类型值传递, 参数为封装类型引用传递。...上面的两个例子明显的值传递和引用传递。但是如果参数String类型呢?...按照前面的例子,String应该是一个封装类型,它应该是引用传递,可以改变值得, 运行的结果应该是”cd”。我们实际运行一下看看, str=ab,这如何解释呢?难道String基本类型?...1.基本类型的变量放在栈里; 2.封装类型中,对象放在堆里,对象的引用放在栈里。 java在方法传递参数时,将变量复制一份,然后传入方法体去执行。 这句话很难理解的,也是解释这个 问题的精髓。

    96530

    引用类型

    在JavaScript中引用类型一种数据结构,将数据和功能组织在一起,或者也称之为类,但是在ECMAScript并不真正具有类,所以我们都把引用类型称之为对象,对象是最常见的引用类型实例,然后对象上面有属性和方法..., 最常见的对象是Object类型引用类型实例。...一般创建对象有两种方法,一个new一个构造函数(任意一个普通函数用于创建一类对象时,它就被称作构造函数,或构造器),另一个就是对象字面量表示法。...还有,像Number、String、Boolean等也属于引用类型,我们都把这些称之为对象。...今天我们了解一下什么引用类型,构造函数和对象字面量的两种概念,之后会慢慢详细说一些Array、Date等一些比较重要的引用类型概念。 (完)

    39620

    final域引用类型该如何写

    public class FinalReferenceExample { final int[] intArray; // final引用类型 static FinalReferenceExample...= null) { // 5 int temp1 = obj.intArray[0]; // 6 } } }   这里final域为一个引用类型,它引用一个int型的数组对象。...对于引用类型,写final域的重排序规则对编译器和处理器增加了如下约束: 在构造函数内对一个final引用的对象的成员域的写入,与随后在构造函数外把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序...(即先对final域引用的对象赋值后才能读取此final域引用的对象)   对上面的示例程序,我们假设首先线程A执行writerOne()方法,执行完后线程B执行writerTwo()方法,执行完后线程...下面一种可能的线程执行时序: 图片.png   在上图中,1对final域的写入,2对这个final域引用的对象的成员域的写入,3把被构造的对象的引用赋值给某个引用变量。

    18900

    【C++ 语言】引用数据类型 ( 引用数据类型定义 | 引用数据类型使用 | 引用类型参数 )

    文章目录 引用类型 引用类型 引用数据类型 : 1....上述引用数据类型解析 : int& 引用数据类型 , b a 的引用 ; ① 变量定义本质 : int a = 8; 分配一块内存存放 int 类型数据 8 , 将该内存赋予一个别名 a ;...打印引用数据类型的修改结果 , 结果 b 被修改成了 888 cout << b << endl; 4.代码示例 : // 001_CMake_1.cpp: 定义应用程序的入口点。...b = a; //③ 调用函数传入引用类型参数 : 将引用类型传给接收引用类型的方法 quote(b); //④ 打印引用数据类型的修改结果 , 结果 b 被修改成了 888 cout <<..., 可以替换原来变量的位置使用 //引用类型解析 : // ① int& 引用数据类型 , b a 的引用 // ② 分配一块内存存放 int 类型数据 8 , 将该内存赋予一个别名

    68920

    javaScript 引用类型

    Object类型   创建Object 实例的属性有两种方式。     1.使用new 操作符后跟Object 构造函数。  ...var person = {         name:"Nicholas",         age: 29       }     另外还有一种创建对象的方式使用Object.create...        o.propTwo = undefined;         o.hasOwnProperty('propTwo');// 返回true       isProtoypeOf:用于检查传入的对象是否当前对象的原型...var obj = {name:“张三”,age:"18"};       console.log(obj.valueOf() === obj);// true Array 类型     数组一种类列表对象...var arr = ["George","John","Thomas"];       console.log(arr.valueOf()) Date 类型     Date 对象的语法

    1.1K40

    Java引用类型

    我觉得像床,衣柜这些东西必需品,就算只有20平米的房间,我们依然需要, 那么强引用就可以看成床,衣柜,我们在开发的时候,会创建很多对象实例,大部分都是强引用,强引用不会被JVM回收,即使 发生了OutOfMemory...public class StrongReference { public static void main(String[] args) { User user = new User...软引用可以理解为家里的非必需品,但是建立在家里空间很足的情况下,如果家里空间很足,那么就不会丢掉,如果家里空间不足了, 就可以丢弃,就好比一些已经不常用的老桌子,家里空间足的时候,可以留着它,但是空间不足了...System.out.println(softReference.get()); } } User(username=steak) User(username=steak) 如上因为空间充足的...注意:需要注意的,如果有一个强引用和弱引用关联了,那么这个弱引用不会被回收。

    62010

    java 引用类型

    我刚接触java、对于引用的认识。就是 Student stu=new Student();stu就是那个引用,至于这个stu个什么样的引用,就不太清楚了。...java 中对象的引用类型分为四种:强引用、弱引用、弱引用、虚引用引用(StrongReference) 就是我们平时最常用的,Student stu=new Student();这里的引用就是个强引用...软引用的适用场景一般来说最常见的缓存吧。用来存一些非必需、但是又利用提升效率的对象。...弱引用(WeakReference) 当时第一次接触一个叫做WeakHashMap的东西,当时在想他有什么不一样,怎么还就Weak了呢。 它的引用强度要稍弱一些,或者说对与对象的牵制要弱一些。...这种引用,讲真,我没用到过,顺道了解到的而已。据说在一些较为精准的场景下会进行使用。不过可能导致,对象回收的效率下降,据说…… 这就是java 引用的基本类型了。

    93710

    Java引用类型:强引用,软引用,弱引用,虚引用

    在Java中提供了4个级别的引用:强引用,软引用,弱引用,虚引用。在这4个引用级别中,只有强引用FinalReference类包内可见,其他3中引用类型均为public,可以在应用程序中直接使用。...软引用引用是除强引用外,最强的引用类型。...所以还是建议使用弱引用 当然了,上面的例子OOM之前回收软引用。怎么才能full gc就回收软引用对象呢?...弱引用引用时一种比软引用较弱的引用类型。...一旦一个弱引用对象被垃圾收集器回收,便会加入导一个注册引用队列中 虚引用引用时所有引用类型中最弱的一个,一个持有弱引用的对象,和没有引用几乎一样的,随时都可能被垃圾回收器回收。

    2.2K31

    JavaScript 引用类型

    Object.getPrototypeOf(Object.prototype)null。js中除字面量以外的一切引用对象都来自这个“根源”对象。...对象浅拷贝:JSON.parse(JSON.stringify(obj)) 全局(global)对象 引用类型拷贝 参考链接:https://juejin.im/entry/58217da92f301e005c2de257...IE9 开始不使用引用计数法了,IE9之后的JavaScript对象都是原生js对象,之前的话部分对象不是原生js对象,比如DOM和BOM,浏览器实现BOM、DOM由C++的COM(组件对象模型)实现的...一个变量存储了一个引用类型,该值的引用次数加一,如果该变量被赋值为另一个变量,则之前的引用类型引用次数减一。...例如: var a = {name:"xiaoming"}//{name:"xiaoming"}的引用次数加一 a = {}或者 a = 1;//{name:"xiaoming"}的引用次数减一 当引用类型引用次数为

    89530

    Java引用类型

    Java当中的数据类型: 1.基本数据类型 2.引用数据类型: 类 String 数组 抽象类 接口 枚举 .........(类名大驼峰) int maxValue = 100; String studentName = "张三 尽量不要使用$ 和 下划线(合法但是不合理) 常量 常亮就是在程序运行的时候无法修改的量...} 其实就是因为long8个字节,int4个字节,将long放到int中,就会报错(Java类型语言),所以要进行类型强转,而将int放到 long里面就可以 注意:boolean类型不能强转为...int 的 int与String的相互转化 int --->String int num = 10; // 方法1 String str1 = num + "";//改成字符串类型(取巧) // 方法...Integer.parseInt(str);//Integer包装类 public class TestDemo{ public static void main(String[] args){

    59110

    java中,方法参数基本类型引用类型的区别

    方法参数基本类型时,传递的值。 ...方法参数引用类型时,传递的内存地址值 当参数基本类型时,在调用方法时将值传递到方法中,运行方法,运行结束方法退出,对原本main中定义的变量没有任何操作(方法中没有return)。...当参数引用类型时,比如:定义数组时,在堆内存中存储了数组的数据,返回这组数据的地址给了数组名,然后在调用方法时,传递的也是这个地址。...也就是说 ,当形式参数基本类型时,方法传的只是值,实际上main 里的实际参数和外部方法里的形式参数不同的两个东西,如果方法不返回值,change里不管怎么改变,与main无关。...而当形式参数引用类型时,比如:形式参数数组时,两个方法通过同一个地址,使用的同一个堆内存里的数组,同一个东西,所以外部方法里面改变了这个数组之后,main再调用也是改变之后的数组。

    1.5K20

    【小家java】引用类型(强引用、软引用、弱引用、虚引用

    引用(Soft Reference):用来描述一些还有用但并非必须的对象。对于软引用对象,如果内存充足gc不会管它,如果内存不够了,它就不能幸免了。...()永远有返回值的。...obj = null; //删除掉强引用 这时,Obj对象就只剩下软引用了,软可达的。这个时候如果用get(),返回值就有可能null了,因此使用的时候要十分注意。...java.lang.OutOfMemoryError: Java heap space System.out.println("map.size->" + map.size()); } 上面使用了强引用类型...所以这个时候为了节约内存,其实是可以把entry一起移除掉的,这里不做演示了,同学们可以自行试验 4、最后 咱们最常用的肯定是强引用,但是java提供的另外几种引用类型也是很有必要了解的,在特殊的场合也非常好用

    2.1K40
    领券