[副贴]一些疑惑,关于小猪妹的... 原贴: http://expert.csdn.net/Expert/topic/2902/2902022.xml?temp=.2027246

SaSBYa 2004-04-02 09:19:55
谢谢:SolidGL(雍软(珠海)研发中心核心成员)

同样谢谢:hyifeng() ,loulanlouzhu(桃花潭水深千尺,不及阿勇念你情),aspcn(飞刀),SimerJoe(浪月), zhouqi66(部落),c5n()

请来此取分.偶分不多了,不好意思,只能放个100了


如果可以的话,大家继续讨论..............

...全文
78 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tavor 2004-04-02
  • 打赏
  • 举报
回复
我记得看过一篇文章,不记得是说JAVA还是C#了,

说string类型的equals比较是值,而==比较是引用地址比较,我想这对引用类型来说都是适用的,而值类型的==就是值比较了。

而object类型是一切类型的祖类,无论是引用类型还是值类型都由其派生,其类型也许可称其为引用类型或亦可称其为值类型,因而在比较其对象时,无论用equals or ==应该都可以说是正确的。

小弟才疏学浅,在此乱发一通,还望各高手别见怪
loulanlouzhu 2004-04-02
  • 打赏
  • 举报
回复
现在出差!

回去再研究!


谢谢送分!
HNU 2004-04-02
  • 打赏
  • 举报
回复


我昨天刚想和你们讨论,就结贴了,谢谢楼主的肯定,我打那么多字也值得了 :)




回复人: SaSBYa(转变作风,重新开始,做自己的框架库) ( ) 信誉:100 2004-04-01 16:08:00 得分:0


To: HNU(為楚有材,於斯為盛!)
你的例子写的不错,注释的很好


真想把这个贴子改成示结的贴子.


不过,说实话 .Net 的内存管理同想象中的真是不一样.或者说,还不全是同一概念.







没看那些星星讲什么,只是箱进来和大家讨论讨论,探讨才能进步。

using System;
class Test
{
static void Main() {
string s = "Test";
string t = string.Copy(s);
Console.WriteLine(s == t);
Console.WriteLine((object)s == (object)t);
}
}
produces the outputTrue

True
False


上面的代码实际相当于下面:



string s = "Test";
string t = string.Copy(s);
object so = s;
object to = t;
Console.WriteLine(s == t);
Console.WriteLine(so == to);

True
False





True

// “==”string类(.NET对string类如值类型处理),进行值类型的操作,就像比较int一样比较内存中的“堆栈”,由于两个都是"Test",显然为True


False

//由于(object)s 和(object)t 为两次不同的装箱操作,并且string s 和 string t 在内存“堆”中两个副本的地址不同(但是 string s 和 string t 在“堆栈”中的原始值相同)。对于一般的类如object 类,== 表示比较引用,看是否指向内存(这里指内存中的“堆”,也就是存放副本的地方)中同一个地址。显然为False;





//////////// 最最重要的一点是string.Copy()方法!! /////////////////

string str1 = "Test";
string str2 = str; (str1 = "Test"也是一样)
//上面实际相当于引用,指向str1的内容,内存中只有一个"Test"
object s = str1;
object t = str2;
Console.WriteLine(s == t);

结果为:True


但是下面用了Copy();

string str1 = "Test";
string str2 = string.Copy(str1);//“深层”复制!内存中将有两个"Test"!
object s = str1;
object t = str2;
Console.WriteLine(s == t);



如 bject o = (object) i;这样的显式执行装箱是毫无必要的




turnmissile 2004-04-02
  • 打赏
  • 举报
回复
// Console.WriteLine((string)s == (string)t);
这句使用的是string的==操作符。做的是字符串比较
// Console.WriteLine((object)s == (object)t);
这里强制使用object的==比较,使用的refernce地址的比较啊!

我也觉得很奇怪,为什么会是这样的结果。可能是因为string是基本类型的数据,而prime data和object在进行boxing的时候有些许的不同吧!但是用ToString()的结果又是正确的。等一下看看他的il再说。

另外还有一种可能是在string定义他的== operation的时候,使用了new keywork。这样也会造成这种结果。

hunterzhi 2004-04-02
  • 打赏
  • 举报
回复
能给我不?
SimerJoe 2004-04-02
  • 打赏
  • 举报
回复
来了,我要分。
SaSBYa 2004-04-02
  • 打赏
  • 举报
回复
原贴: http://expert.csdn.net/Expert/topic/2902/2902022.xml?temp=.2027246
o1o 2004-04-02
  • 打赏
  • 举报
回复
我看过一本书,照书上的答案那结果应该是“False”(最后一句)。
o1o 2004-04-02
  • 打赏
  • 举报
回复
哈哈,结贴的方式倒也是很细心啊。
zhouqi66 2004-04-02
  • 打赏
  • 举报
回复
多谢楼主,接点分先。
turnmissile 2004-04-02
  • 打赏
  • 举报
回复
to tavor(龙双公子):
没有错,java中的==就是比较地址,但是这个在c#中,就不是这样了,object的定义是比较reference,其他的基本都有自己的定义, 如string就是进行字符串比较。

内容概要:本文介绍了一种基于多目标粒子群算法(MOPSO)的微电网优化调度模型,综合考虑风能、光伏、储能系统、柴油发电机、燃气轮机以及与主电网之间的能量交互等多种分布式能源的协同运行。通过构建以运行成本最小化、碳排放最低化和系统可靠性最优化为目标的多目标优化模型,利用Matlab平台实现MOPSO算法求解,完成对微电网在不同运行场景下的能量管理与调度方案优化。该模型能够有效平衡经济性与环保性之间的关系,适用于含多类型分布式电源的复杂微电网系统,具有较强的工程应用价值和科研参考意义; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及工程技术人员,尤其适合从事微电网、智能电网、综合能源系统、可再生能源集成与优化调度等领域研究的专业人士; 使用场景及目标:①用于多能源耦合微电网系统的协同优化调度研究;②支持多目标智能优化算法在能源系统中的建模与求解实践,帮助用户掌握MOPSO在实际工程问题中的应用方法;③为学术论文复现、毕业设计、科研项目开发提供完整的代码实例与技术支撑; 阅读建议:建议读者结合Matlab代码与理论文档,深入理解目标函数构建、约束条件处理及Pareto最优解集生成机制,重点关注算法参数设置、多目标权衡分析与结果可视化,并可通过调整能源配置或引入新约束进行二次开发与创新研究。

111,129

社区成员

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

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

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