String s="a"+"b"+"c"产生了几个对象?

问题描述

Strings="a"+"b"+"c"产生了几个对象?这样的面试题目,我不能确定,大家有没有看法,解释的清除一点

解决方案

解决方案二:
sa+ba+b+c应该是3个
解决方案三:
我觉得是六个吧abca+ba+b+cs不确定对不对。
解决方案四:
好像是1个吧
解决方案五:
abc分别作为字符串来进行传递拼接,我觉得不应该单独作为对象。--不知道,高手来回答咯
解决方案六:
一个abc
解决方案七:
一个.methodpublichidebysigstaticvoidMain()cilmanaged{.entrypoint//Codesize15(0xf).maxstack1.localsinit([0]strings)IL_0000:nopIL_0001:ldstr"abc"IL_0006:stloc.0IL_0007:ldloc.0IL_0008:callvoid[mscorlib]System.Console::WriteLine(string)IL_000d:nopIL_000e:ret}//endofmethodProgram::Main
解决方案八:
我自己也拿不准。帮顶……
解决方案九:
我觉得应该是6个,同意2楼
解决方案十:
楼上的兄弟,这段代码要怎么才能看到
解决方案十一:
onlyone...
解决方案十二:
一个内存就分了一块空间的只不过这个空间里的值变化了而已!
解决方案十三:
One..
解决方案十四:
转到汇编状态看以看到那个东西最基本的原理:String的内容是不可变的!这是最基础的东西。
解决方案十五:
FIVE请参考c#高级编程一书。
解决方案:
c#高级编程第二章string类型14楼说错了
解决方案:
呵呵不是说错说漏了
解决方案:
1个abc
解决方案:
六个因为字符串储存在静态储存区,其值是不可被修改的,而对字符的每一次操作实际上都新建立了一个对象,然后再将引用指向该对象a,b,c和s四个a+b时有一个(a+b)+c再有一个这样就是六个了
解决方案:
Mark
解决方案:
1个STRING类跟INT等相比有点特殊,但这里是一个对象“ABC”
解决方案:
什么叫"几个对象"?定义一个strings;//这算一个对象的话.那么"a"+"b"+"c";//这里,据说会被编译优化成一个字符串"abc",那么是不是只算一个对象.那么总共是不是两上对象.偶不太懂的,只是说说自己想法,欢迎拍砖~~
解决方案:
关注
解决方案:
关注
解决方案:
String对象称为不可变的(只读),因为一旦创建了该对象,就不能修改该对象的值。看来似乎修改了String对象的方法实际上是返回一个包含修改内容的新String对象。如果需要修改字符串对象的实际内容,请使用System.Text.StringBuilder类。因此,当你需要大量拼接、删除、修改字符创使,用StringBuilder可以优化性能我觉得应该是4个,s、a、b、c,因为string类型的做+的时候还是会生成一个临时的字符串,所以应该就是4个,如果是stringbulid类型就是一个。
解决方案:
后来一想好像错了,因为s+a之后又生成了一个新的对象,新的字符串,所以是6个,没有想到,脑袋湖了。赫赫
解决方案:
1个
解决方案:
同意2楼的string是个假引用类型,它更象个值类型!
解决方案:
1个
解决方案:
sabcabc
解决方案:
最好的软件开发交流QQ群[37934302]欢迎大家进来切磋切磋![IT精英进]
解决方案:
这种代码,编译器应该直接直接优化成一个的
解决方案:
一个吧投票解决~
解决方案:
要解答这个问题,需要好好看下String跟StringBuilder的区别。s="a"+"b"+"c";//这种编译器可以直接优化。这种是创建3次对象跟s1="a";s2="b";s3="c";s=s1+s2+s3是两个不同的概念;这种是6次对象String对象是不可改变的。每次使用System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类。例如,当在一个循环中将许多字符串连接在一起时,使用StringBuilder类可以提升性能。
解决方案:
我感觉理论上是6个,但如果编译器对这种表达式进行优化的话,那就不一定了。
解决方案:
在.NET框架和通用语言运行时刻(CLR)以前,开发者总是花费大量时间处理字符串。一个字符串例程可重用库几乎是每一个C和C++程序员的工具箱中的一部分。编写在不同程序语言之间交换字符串数据的代码也是相当困难的。例如,Pascal把字符串存储为一个内存字符数组,其中,该数组的第一个元素指示字符串的长度;而C把字符串存储为一个具有可变长度的字符内存数组,字符串的末端加上一个ASCIInull字符(在C中以""表示)。  在.NET框架中,字符串以常量方式存储。这意味着,当你用C#(或任何其它.NET语言)创建一个字符串时,该字符串以一种固定大小存储在内存以便CLR运行更快些。结果是,当你实现例如连接字符串或修改一个字符串中的单个字符时,CLR实际上是创建你的字符串的多个副本。根据这个话来看,应该是6个
解决方案:
编译器应该优化成一个.
解决方案:
一个!!
解决方案:
理论上说应该是6个。
解决方案:
4个
解决方案:
如果是strings1="a",s2="b",s3="c";s4=s1+s2+s3;的话应该是5个对象不知道s="a"+"b"+"c";这种形式会不会被编译器优化。
解决方案:
6楼的说的好,都给出了IL像这样定义:Strings="a"+"b"+"c"优化的小事编译器都帮你做好了。
解决方案:
hertcloud-->编译器应该优化成一个.同意这个,好像原来看见java区也问过这个问题,好像正确的也是1个,编译器会做优化的根据6楼的ilcode也可以看出来是1个.methodpublichidebysigstaticvoidMain()cilmanaged{.entrypoint//Codesize15(0xf).maxstack1.localsinit([0]strings)IL_0000:nopIL_0001:ldstr"abc"IL_0006:stloc.0IL_0007:ldloc.0IL_0008:callvoid[mscorlib]System.Console::WriteLine(string)IL_000d:nopIL_000e:ret}//endofmethodProgram::Main
解决方案:
5个
解决方案:
6个
解决方案:
6个
解决方案:
"a""b""c""ab""abc"s这6个
解决方案:
一个吧
解决方案:
优化成一个只是给你优化之后的感觉实习上是6个
解决方案:
.methodprivatehidebysigstaticvoidMain(string[]args)cilmanaged{.entrypoint//代码大小8(0x8).maxstack1.localsinit([0]strings)IL_0000:nopIL_0001:ldstr"abc"IL_0006:stloc.0IL_0007:ret}//endofmethodProgram::Main对于编译器来说只是一个,内存是分配置了6次
解决方案:
不要瞎扯什么6个了编译以后汇编代码是1个就是1个,实际运行的是IL代码,不是c#程序

时间: 2024-11-08 18:07:58

String s="a"+"b"+"c"产生了几个对象?的相关文章

屏蔽IE弹出"您查看的网页正在试图关闭窗口,是否关闭此窗口"的方法_javascript技巧

在IE6中范例代码如下:window.opener= null;window.close(); 在IE7中示例代码如下: window.opener= null;window.open("","_self"); window.close(); 如果要全屏显示(去掉IE的工具栏.地址栏和菜单栏等信息),则只能用window.open();的方法.如果第一个页面就要全屏显示,则需要设置一个中转页面.中转页面代码如下:(body中什么都不必写) 复制代码 代码如下: &l

谁能解释下"递归的本质就是用压栈与出栈操作"?

问题描述 谁能解释下"递归的本质就是用压栈与出栈操作"? 递归的本质就是用压栈与出栈操作 这句话感觉很有道理啊 解决方案 当递归调用时每次调用自己时可以看做是压栈过程,当递归条件满足结束时,递归一级一级的返回时可以看做是出栈的过程. 解决方案二: 函数调用的本质就是"压栈与出栈操作",递归不过是它的特例,自身调用自身. 解决方案三: 递归可以简单理解为一个大问题分为小问题,然后小问题继续分解,直到能解决,然后几个小问题解决,就是解决一个大问题,金字塔形状最后解决所有

.NET 多线程发送WebRequest访问失败,异常信息:"WebException,基础连接已关闭:连接意外关闭。"(ServicePointManager最大并发数已修改) ,请做过这方面的专家指点一二。

问题描述 前段时间公司要求让我完成一个测试工具,此测试工具用于测试广域网负载均衡.我们的目的是测试客户的负载均衡设备是否正常运转,以及在各种情况下负载均衡设备的运行状况,以保证最终的客户能够时时访问到应用.工具的结构和实现已经大部分完成了,但是在测试阶段,却发现了一些问题,这些问题十分没有规律性,可能涉及一些网络网络方面的知识,本人虽然做的是Web开发,但是对于网络只是也是知之甚少,通过了很长一段的研究,还是没能找到根源.现在将问题分享给大家,希望大家都能有所收获.程序问题:1.WebReque

用linq增加数据时"服务器无法生成类型为“TinyInt”的主键列。"

问题描述 我的数据库一张表中设置了id为主键,类型为tinyint,允许为空,并且是把它做为了一个自增的标识符,当我在vs2008中把表拖进来写好代码增加记录的时候出现了"服务器无法生成类型为"TinyInt"的主键列."我查看了一下自动生成的代码如下[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_id",AutoSync=AutoSync.OnInsert,DbType=&

请问可以在客户进入队列之前播报"正在转接中,请稍后",当发现坐席全满,客户进入队列的时候报"坐席全忙,请耐心等待"吗?

问题描述 请问可以在客户进入队列之前播报"正在转接中,请稍后",当发现坐席全满,客户进入队列的时候报"坐席全忙,请耐心等待"吗?

请问:如何实现"点击字段名字可以实现按升序,降序排序"?谢谢指教!

问题描述 请问:如何实现"点击字段名字可以实现按升序,降序排序"?谢谢指教! 解决方案 解决方案二:如果是gridview设置下就好了`其他的写点代码再重新绑定下解决方案三:datagrid不是有排序事件吗?解决方案四:datagrid不是有自带的排序事件吗?解决方案五:GridView1.AllowSorting=true;解决方案六:虽然现在不是太明白各位"高手"的意思,仍十分感激各位!解决方案七:察看MSDN中的关于GridView的排序的帮助估计你应该会很快

vs中的aspx页面-Vs引用样式id="不提示"

问题描述 Vs引用样式id="不提示" 在vs中aspx页面引用样式后,比如 请问这怎么解决,找了好久,可是没有合适的答案,请大侠帮忙解决! 解决方案 id="不提示" 这中写法是老师教的,还是你自己想的 样式调用不要用中文,可以这样写id="nav" 然后样式中 .nav{ width:500px; heigth:500px; border:1px solid red; } 样式里面自己发挥 相关文章 ajax-关于Ajax 入门一直出错 vi

jquery mobile中使用data-role="dialog"弹出对话框的问题

问题描述 jquery mobile中使用data-role="dialog"弹出对话框的问题 如图,当页面除了一个"page"和"dialog"还有其它的 容器时,对话框后的背景就会显示没有样式的这个容器内容, 这是为什么呢,怎样才能让背景中不显示任何东西 解决方案 试试把背景内容放到另一个page中 你说的data-role =dialog 我没注意到 这个属性... 另外 可以看看 . data-role=popup http://www.

String类型两种不同实例化方式

原题: 关于Java栈与堆的思考  1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器.但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性.另外,栈数据可以共享,详见第3点.堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据.但缺点是,由于要在运行时动态分配内存,存