String类型比较的问题

pn_nl 2006-06-08 05:17:15
String first = "hehe";
String second = "hehe";

if(f1==s1)
Console.WriteLine("相等");
else
Console.WriteLine("不相等");

这个执行结果是相等,我有些不理解,我知道String已经创建就是不变的
但是我还是不理解为什么上面的结果是相等,String类型不是引用类型么?
...全文
307 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzb1982719 2006-06-09
  • 打赏
  • 举报
回复
String first = new String("hehe");
String second =new String("hehe");

first和second就肯定不一样了
这样写无法通过啊,
但是String first = "hehe";
String second = "hehe";

if(f1==s1)
Console.WriteLine("相等");
else
Console.WriteLine("不相等");

肯定相等.你的定义类型一样,不过是变量名不一样,能不等吗,
fishmin 2006-06-09
  • 打赏
  • 举报
回复
.NET框架程序设计一书中讲到过,应该是字符串驻留技术,有多个相同string对象出现时,cls优化处理了,实质上是同一对象,所以==是返回true的!
pn_nl 2006-06-09
  • 打赏
  • 举报
回复
字符串等同/比较方法
可以通过许多方法比较两个字符串。对于等同和不等同比较,主要差别当然在于,是比较引用(两个字符串指向同一对象)还是比较值(两个字符串包含相同的字符)。

对于等同比较和关系比较,另一个主要差别在于,是使用当前环境的排序顺序,还是使用字符串中各个字符的原始序号值。(还有一个较小的差别,即比较时是否区分大小写。)比较的默认设置是使用它们所在线程的当前环境并区分大小写。通常,此设置就是您需要的设置。

== 运算符调用 String.Equals,后者将执行区分环境和大小写的比较。如果您希望使用 C# 比较引用,可以将两个字符串引用都强制转换为 Object,或者使用 Object.ReferenceEquals。
xqlez 2006-06-09
  • 打赏
  • 举报
回复
尽管 string 是引用类型,但定义相等运算符(== 和 !=)是为了比较 string 对象(而不是引用)的值。这使得对字符串相等性的测试更为直观。

个人觉得比较字符串的值用的比较多
thoughter 2006-06-09
  • 打赏
  • 举报
回复
pn_nl(2006年,两个目标,一定要实现!!) ( ) 信誉:100 2006-06-09 09:55:00 得分: 0


如果比较值的话,用Equals方法就好了,为什么要重写==???


个人感觉还是更习惯使用==来比较...
hatita 2006-06-09
  • 打赏
  • 举报
回复
比较String的引用意义不大!

String first = "hehe";
String second = "hehe";

我可以肯定的告诉你,这两个字符串的引用也是一样的,听说过字符串池没?
pn_nl 2006-06-09
  • 打赏
  • 举报
回复
如果比较值的话,用Equals方法就好了,为什么要重写==???
pn_nl 2006-06-09
  • 打赏
  • 举报
回复
但是如果我想比较引用,那怎么办啊?
重写这些运算符,感觉就是画蛇添足
diandian82 2006-06-08
  • 打赏
  • 举报
回复
这是特殊的引用,比较string比较的是内容
runrunrun 2006-06-08
  • 打赏
  • 举报
回复
不好意思,不是说 kssys 。 CSDN刷新有问题
runrunrun 2006-06-08
  • 打赏
  • 举报
回复
to 楼上, 应该你去试试
kssys 2006-06-08
  • 打赏
  • 举报
回复
因为String类重写了==/!=/+...等运算符,使它符合值类型的特性。

事实上,这是一件好事。
amandag 2006-06-08
  • 打赏
  • 举报
回复
hehe,是想成Java了

sorry,楼主
pn_nl 2006-06-08
  • 打赏
  • 举报
回复
To:runrunrun

没看清楚,你的那个结果是对的
pn_nl 2006-06-08
  • 打赏
  • 举报
回复
To:runrunrun

自己去试试啊,看结果是什么?
pn_nl 2006-06-08
  • 打赏
  • 举报
回复
To:amandag(高歌)
如果在java里,你的结果是对的,呵呵
runrunrun 2006-06-08
  • 打赏
  • 举报
回复
因为string 重载了 == , 就不光是引用比较了。
char[] tmp={'h','e','h','e'};
char[] tmp2={'h','e','h','e'};

object first = new String(tmp);
object second = new String(tmp2);
if(first==second)

应该是不相等
pn_nl 2006-06-08
  • 打赏
  • 举报
回复
楼上的自己写一下,String类哪有那样的构造函数啊?????

char[] tmp={'h','e','h','e'};
char[] tmp2={'h','e','h','e'};

String first = new String(tmp);
String second = new String(tmp2);

if(first==second)
Console.WriteLine("相等");
else
Console.WriteLine("不相等");

即使是这样写,结果仍然是相等,为啥???
amandag 2006-06-08
  • 打赏
  • 举报
回复
first和second指向了在内存中的同一个常量字符串"hehe"

如果你是
String first = new String("hehe");
String second =new String("hehe");

first和second就肯定不一样了
lovvver 2006-06-08
  • 打赏
  • 举报
回复
string是引用类型,也有值类型的特征.
代码转载自:https://pan.quark.cn/s/8ce4326d996e 对于在 CentOS 7 系统中修改网卡配置文件后无法使设置生效的情况,经过实践验证,可以通过使用 nmcli 命令来进行调整。完成修改之后,需要重新启动虚拟机以使更改生效,这样操作流程即告完成。如果设置仍然无法生效,则表明虚拟机在启动过程中所获取的 IP 地址配置并非针对 eth0,此时可以对其它网卡的配置文件进行修改或将其移除。在 CentOS 7 系统中,网络配置的管理机制与早期版本存在差异,主要体现为采用了 Network Manager 服务来负责网络接口的管理。在某些情形下,尽管修改了 `/etc/sysconfig/network-scripts` 目录下的 `ifcfg-eth0` 文件,但网络配置却未能即时生效。此类问题的发生通常源于 CentOS 7 采用了不同于以往的配置读取方法。接下来将具体阐述如何借助 nmcli 命令来处理这一挑战。 以 root 用户身份登录系统并打开终端界面。nmcli 是 Network Manager 提供的命令行界面工具,它支持在命令行环境下执行网络连接的建立、编辑、查询及管理任务。针对修改 eth0 网卡配置的需求,可以遵循以下步骤进行操作: 1. 导航至 `/etc/sysconfig/network-scripts` 目录: ``` cd /etc/sysconfig/network-scripts ``` 2. 检查该目录内是否存在 `ifcfg-eth0.bak` 文件,该备份文件可能是先前调整配置时遗留下来的,若存在可能造成冲突。若发现该文件,可以选择将其删除: ``` [root@localhost netw...
代码转载自:https://pan.quark.cn/s/46fd08fb879c 网管教程 从入门到精通软件篇 ★一。★详尽的xp修复控制台指令及其应用!!! 放入xp(2000)的光盘,安装时选择R,执行修复! Windows XP(涵盖 Windows 2000)的控制台指令是在系统遭遇某些意外状况时的一种极具效用的诊断、检测以及恢复系统功能的工具。笔者确实一直期望能够将这方面的指令进行归纳,此次由老范辛苦整理了这份极具价值的秘籍。 Bootcfg bootcfg 命令用于启动配置与故障恢复(对大多数计算机而言,即 boot.ini 文件)。 带有特定参数的 bootcfg 命令仅在运用故障恢复控制台时方可使用。能够在命令行界面下运用带有不同参数的 bootcfg 命令。 用法: bootcfg /default 设定默认引导选项。 bootcfg /add 向引导清单中增添 Windows 安装。 bootcfg /rebuild 重复整个 Windows 安装流程并让用户选择需添加的项目。 注意:运用 bootcfg /rebuild 之前,应先借助 bootcfg /copy 命令备份 boot.ini 文件。 bootcfg /scan 探查用于 Windows 安装的全部磁盘并展示结果。 注意:这些结果被静态存储,并用于当前会话。若在当前会话期间磁盘配置发生变动,为获取更新的探查结果,必须先重启计算机,然后再次探查磁盘。 bootcfg /list 列示引导清单中已有的项目。 bootcfg /disableredirect 在启动引导程序中禁用重定向。 bootcfg /redirect [ PortBaudRrate] |[ useBio...

111,131

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧