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

Delphi字符串是不可变的吗?

Delphi字符串是可变的。在Delphi中,字符串是由字符组成的数组,可以通过修改数组元素来改变字符串的内容。例如,可以使用以下代码将字符串中的某个字符修改为另一个字符:

代码语言:txt
复制
var
  s: string;
begin
  s := 'Hello, world!';
  s[1] := 'J';
  ShowMessage(s); // 输出 "Jello, world!"
end;

需要注意的是,尽管字符串本身是可变的,但是在某些情况下,需要创建一个新的字符串来存储修改后的内容。例如,如果将字符串作为参数传递给函数,并且在函数内部修改了字符串的内容,那么需要创建一个新的字符串来存储修改后的内容,以避免影响原始字符串的内容。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java 中 String 真的可变

我们都知道 Java 中 String 类设计可变,来看下 String 类源码。 ? 可以看出 String 类 final 类型,String 不能被继承。...其值 value 也就是对字符数组封装,即 char[],其值被定义成 private final ,说明不能通过外界修改,即不可变。 String 真的 "不可变 " ? 来看下面这个例子。...Java中String真的可变? 所以说,这里字符串并不是可变,只是变更了字符串引用。...String 真的真的真的 "不可变 " ? 上面的例子肯定是不可变,下面这个就尴尬了。 ?...通过反射,我们改变了底层字符数组值,实现了字符串 “不可变” 性,这是一种骚操作,建议这么使用,违反了 Java 对 String 类可变设计原则,会造成一些安全问题。 是不是又涨姿势了?

85820

Java 中 String 真的可变

我们都知道 Java 中 String 类设计可变,来看下 String 类源码。...其值 value 也就是对字符数组封装,即 char[],其值被定义成 private final ,说明不能通过外界修改,即不可变。 String 真的 "不可变 " ? 来看下面这个例子。...所以说,这里字符串并不是可变,只是变更了字符串引用。...String 真的真的真的 "不可变 " ? 上面的例子肯定是不可变,下面这个就尴尬了。...通过反射,我们改变了底层字符数组值,实现了字符串 “不可变” 性,这是一种骚操作,建议这么使用,违反了 Java 对 String 类可变设计原则,会造成一些安全问题。 是不是又涨姿势了?

87830

什么可变对象?用图说话

可变与不可变 列表(list)一个可变容器,可变与不可变一对很微妙概念,因为网上经常出现,所以再重点总结下。 创建一个列表 a = [1,3,[5,7],9,11,13],存储示意图: ?...因此,对列表而言,它能增加或删除元素,所以它是可变。 但是,如果仅仅在列表a中做这一步操作: a[2].insert(1,6) #在`a[2]`(也是一个列表)中插入元素6 插入后可视化图: ?...对于“可变”这个概念而言,这就不是真正让a可变操作。 tuple就是一个典型可变容器对象,对它而言,同样也可以修改嵌套对象取值,但这并没有真正改变tuple内元素。...如下所示,有一个元祖a a =(1,3,[5,7],9,11,13) a存储示意图如下: ? 下面插入一个元素6: a[2].insert(1,6) 可以看到,a内元素没增没减,长度还是6 ?...不可变容器对象本质:一旦创建后,长度就被唯一确定。但是,对于list而言,长度会有增有减,所以它是可变

33310

为什么Java字符串可变对象?

请思考: 假若代码如下所示,s1和s2还会指向同一个实际String对象?假若字符串对象允许改变,那么将会导致各种逻辑错误,比如改变一个对象会影响到另一个独立对象....Java在运行时也保存了一个字符串池(String pool),这使得String成为了一个特别的类。 String类不可变好处 1.只有当字符串可变字符串池才有可能实现。...但如果字符串可变,那么String interning将不能实现(译者注:String interning指对不同字符串仅仅只保存一个,即不会保存多个相同字符串。)...因为字符串可变,所以它不可改变,否则黑客们可以钻到空子,改变字符串指向对象值,造成 安全漏洞。 3.因为字符串可变,所以是多线程安全,同一个字符串实例可以被多个线程共享。...5.因为字符串可变,所以在它创建时候hashcode就被缓存了,不需要重新计算。这就使得字符串很适合作为Map中键,字符串处理速度要快过其它键对象。

51120

为什么Java字符串可变对象?

请思考: 假若代码如下所示,s1和s2还会指向同一个实际String对象?假若字符串对象允许改变,那么将会导致各种逻辑错误,比如改变一个对象会影响到另一个独立对象....Java在运行时也保存了一个字符串池(String pool),这使得String成为了一个特别的类。 String类不可变好处 1.只有当字符串可变字符串池才有可能实现。...但如果字符串可变,那么String interning将不能实现(译者注:String interning指对不同字符串仅仅只保存一个,即不会保存多个相同字符串。)...因为字符串可变,所以它不可改变,否则黑客们可以钻到空子,改变字符串指向对象值,造成安全漏洞。 3.因为字符串可变,所以是多线程安全,同一个字符串实例可以被多个线程共享。...5.因为字符串可变,所以在它创建时候hashcode就被缓存了,不需要重新计算。这就使得字符串很适合作为Map中键,字符串处理速度要快过其它键对象。

64610

灵魂拷问:为什么 Java 字符串可变

在逛 programcreek 时候,发现了一些精妙绝伦主题。比如说:为什么 Java 字符串可变?像这类灵魂拷问主题,非常值得深思。...怎么还说字符串可变呢? 这里需要给大家解释一下,什么对象,什么对象引用。 在 Java 中,由于不能直接操作对象本身,所以就有了对象引用这个概念,对象引用存储对象在内存中地址。...我们通常所说字符串可变指“字符串对象是不可变”。alita 字符串对象“阿丽塔”或者“战斗天使阿丽塔”引用。这下应该明白了吧?...由此字符串非常适合作为 HashMap key 值,这样可以极大地提高效率。 另外呢,不可变对象天生线程安全,因此字符串可以在多个线程之间共享。...举个反面的例子,假如字符串可变,那么数据库用户名和密码(字符串形式获得数据库连接)将不再安全,一些高手可以随意篡改,从而导致严重安全问题。

60620

为什么说 Go 语言字符串可变

原文链接: 为什么说 Go 语言字符串可变? 最近有读者留言说,平时在写代码过程中,会对字符串进行修改,但网上都说 Go 语言字符串可变,这是为什么呢?...首先来看看它底层结构: type stringStruct struct { str unsafe.Pointer len int } 和切片结构很像,只不过少了一个表示容量 cap...str:指向一个 []byte 类型指针 len:字符串长度 所以,当我们定义一个字符串: s := "Hello World" 那么它在内存中存储这样: 图片 当我们在程序中对字符串进行重新赋值时...,比如这样: s := "Hello World" s = "Hello AlwaysBeta" 底层存储就变成了这样: Go 实际上重新创建了一个 []byte{} 切片,然后让指针指向了新地址...更直接一点,我们直接修改字符串单个字符,比如: s := "Hello World" s[0] = 'h' 这样做的话,会直接报错: cannot assign to s[0] (strings are

23810

灵魂拷问:为什么 Java 字符串可变

这是 Java极客技术第 251 篇原创文章 在逛 programcreek 时候,发现了一些精妙绝伦主题。比如说:为什么 Java 字符串可变?像这类灵魂拷问主题,非常值得深思。...怎么还说字符串可变呢? 这里需要给大家解释一下,什么对象,什么对象引用。 在 Java 中,由于不能直接操作对象本身,所以就有了对象引用这个概念,对象引用存储对象在内存中地址。...我们通常所说字符串可变指“字符串对象是不可变”。alita 字符串对象“阿丽塔”或者“战斗天使阿丽塔”引用。这下应该明白了吧? 03....由此字符串非常适合作为 HashMap key 值,这样可以极大地提高效率。 另外呢,不可变对象天生线程安全,因此字符串可以在多个线程之间共享。...举个反面的例子,假如字符串可变,那么数据库用户名和密码(字符串形式获得数据库连接)将不再安全,一些高手可以随意篡改,从而导致严重安全问题。 05.

41710

混合还是混合?正确云问题?

但是更重要,雷德蒙德频道合作伙伴杰弗里·施瓦茨说,近一半公司表示他们还没有实施混合云策略,实际上已经有一个云。...虽然混合云旨在提供跨内部部署和云计算资源集成计算环境,但调研机构IDC最近一份报告表明,采用该技术最有效方法根据各种用例分割数据和处理。...有时候公共和私有云将仍然需要一起工作,但是它可能不会像人们以前所想一样常见。 据Cirba公司首席技术官Andrew Hillier介绍,采用混合云成功关键适当治理。...不幸,治理通常是开发/测试过程中最后一个考虑环节,当混合部署真实成本和复杂性出现在现实世界生产环境中时,许多组织对此感到震惊。...他说,需要一套关于工作量布局和直接编入分析和自动化系统其他因素正式指南,使得治理成为混合云中核心原则,而不仅仅是文档或意识活动。

1.3K30

程序员过关斩将--你业务可变

u on o.UserId=u.UserId where ProvinceId=@ProvinceId 有问题,sql没问题,这时候用户A省市区县信息突然变了(也许是在其他地区买房...那你有没有想过为什么D妹子设计会出现这样问题呢? 深刻理解业务才能避免以上类似的错误发生,一定要深刻理解不变和可变业务点。...拿D妹子统计来说,你业务统计区域订单数,这个业务在产品设计上定义不变性,也就是说在行为产生那个时间点就确定了业务性质,这个业务性质不会随着其他变而变。...具体到当前业务就是:用户在X省下订单不会随着用户区域信息变化而变化,说白了就是说用户在X省生成订单永远属于X省。 谈到业务性质不变性,对应就有业务可变性。...假如你开发过类似于QQ空间这样业务,那肯定也做过类似访客功能。当要显示访客记录时候,访客名称在多数情况设计中属于可变业务。什么意思呢?

32720

再啰嗦最后一次,Java字符串可变

02、为什么 String 可变 重点来了啊,为什么 String 可变?原因可以从四个方面说起,缓存、安全性、同步和高性能。...字符串常量池 Java 虚拟机用来存储字符串一个特殊区域,由于字符串可变,因此 Java 虚拟机可以在字符串常量池中只为同一个字符串存储一个字符串副本来节省空间。...但如果字符串可变,这方面的担忧就不存在了。因为在执行更新之前,字符串确定,就是我们检查安全性之后值。...3)线程安全 由于字符串可变,因此可以在多线程之间共享,如果一个线程把字符串值修改为另外一个,那么就会在字符串常量池中创建另外一个字符串,原有的字符串仍然会保持不变。...我相信你一定对字符串可变性有了充足了解,由于字符串可变,因此我们可以将它看作一个特殊基本数据类型,哪怕是在多线程环境下,也不用担心它值是否会发生改变。

52920

什么字符串常量池_常量池中字符串对象

大家好,又见面了,我你们朋友全栈君。...在工作中,String类我们使用频率非常高一种对象类型。JVM为了提升性能和减少内存开销,避免字符串重复创建,其维护了一块特殊内存空间:字符串常量池。字符串常量池由String类私有的维护。...堆里边字符串常量池存放字符串引用或者字符串(两者都有) 比如new String(“test”)就会先在常量池中检查是否存在,不存在则在常量池中创建,然后堆中创建其引用。..., 运行时常量池存放字面量引用 使用双引号方式显式声明字符串,则直接放入字符串常量池中(final修饰“变量”可以直接看作双引号字面量) StringTable为什么要调整(1.6-1.7) permSize...默认比较小 永久代垃圾回收频率低 字符串拼接操作 常量与常量拼接结果在常量池,原理编译器优化 常量池中不会存在相同内容常量 只要其中一个变量,结果就在堆中。

44040

?责任?,是因为菜!

知识膨胀过程 距离找到学习方法,并全身心投入到学习中五十几天,还在不断修正自己学习方法,虽然大体方向,但是还是有瑕疵....学以致用,才是转换知识最高效率办法,你学会了一堆新东西,但是你日常不用,迟早要还回去. ---- 改变自己圈子 从学习,到总结自己学到东西,再到分享到简书,我很开心,因为自己这过程并没有遇到什么弯路...朋友圈里每个人都是积极向上,都在为这自己理想而奋斗,有能力特别强在想着选择去谷歌还是Facebook,有985、211在抉择着BAT,看着他们在奋斗,你就没有一丝丝触动?...他们便是我目标,我要追赶目标,没有目标,没有压力,就没有动力. 为什么他们有在美团,有在京东,有在头条,有在阿里,而你,却在一家不知名外包公司,做着流水线般码农工作呢....为什么要安于现状,你不改变,谁也给不了你想要生活. ---- 结束语 5月5日,我结束了第一轮自学,紧接着开始第二轮学习,我掌握了网络项目的各个栈基础操作,时候付诸于实践了,做一个自己小项目

711110

jdk源码分析之HashMap--为什么key建议可变对象

我们都知道创建HashMap时候如果指定类型,默认HashMap类型(其实就算指定了编译后也是Object类型,此处不做赘述),可能我们大部分人停留在使用层面,并没有对底层源码实现有过过多分析和研究...,那么我们首先抛出今天议题,为什么建议HashMapkey使用可变对象呢?...在详细介绍答案之前,再问一个问题,在代码使用层面,如果key可变对象,对我们get查询操作有影响?有什么影响? 首先,还是先看一下get方法代码: ?...简单从源码层面做了一下分析,那么key是否可变与hash计算有关系?...那假如说key可变对象,比如说key一个人,value工作信息,第一次put之后,插入到Entry 数组具体位置,那如果这个key对应的人对象内部属性发生变化,体重变动,那么会导致key

46740

再啰嗦最后一次,Java字符串可变

字符串常量池 Java 虚拟机用来存储字符串一个特殊区域,由于字符串可变,因此 Java 虚拟机可以在字符串常量池中只为同一个字符串存储一个字符串副本来节省空间。...但如果字符串可变,这方面的担忧就不存在了。因为在执行更新之前,字符串确定,就是我们检查安全性之后值。...3)线程安全 由于字符串可变,因此可以在多线程之间共享,如果一个线程把字符串值修改为另外一个,那么就会在字符串常量池中创建另外一个字符串,原有的字符串仍然会保持不变。...假如字符串可变,那就意味着哈希码会有多个,在通过键获取值时候,就不一定能够获取到对值了。 你看,字符串常量池存在,哈希码存在,在很大程度上提高了程序性能。...我相信你一定对字符串可变性有了充足了解,由于字符串可变,因此我们可以将它看作一个特殊基本数据类型,哪怕是在多线程环境下,也不用担心它值是否会发生改变。

38731

不会运行你代码,我不会导入自己数据!

常常遇到有人问起看到分享教程导入数据方式data(dune)等直接调用系统数据,而自己怎么读入自己数据呢? 对于初学者来讲,这确实是个问题。...如何准备数据、拿到正确格式数据并导入后续代码进行分析,学习和应用过程中第一个拦路虎。 为什么教程会习惯使用内置数据?...行名字数字,列名字字符串(如果我们对这些字符串不熟悉,对我们来说就没任何意义;每个字符都认识,串一起就不知道啥了~~),中间整数。除此外也看不出其它信息了。...从dim(dune)可以看出这是一个20行X30列矩阵;可以推测出,每一行一个样品,每一列一个物种 (另一个佐证列名字长度确实为8个字符,与物种名字4+4缩写一致)。...dim(dune) ## [1] 20 30 这个格式跟我们通常OTU丰度表 (我们表通常是每一行一个物种,每一列一个样品)略有不同。 3.

1.4K10
领券