社区
C#
帖子详情
为什么string不需要new?
jjf120801
2009-03-11 07:51:03
C#中,定义一个类的对象需要new,比如:CLASS A = new CLASS;
为什么string不需要new呢? string a = "abcd";
...全文
998
62
打赏
收藏
为什么string不需要new?
C#中,定义一个类的对象需要new,比如:CLASS A = new CLASS; 为什么string不需要new呢? string a = "abcd";
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
62 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wartim
2009-04-10
打赏
举报
回复
.net框架设计书里说过了,是特例,简化写法,CLR自动会处理
我感觉应该是编译器对String的“=”运算符重载过了
Roc_Lee
2009-04-10
打赏
举报
回复
string是个特例
believeken
2009-04-09
打赏
举报
回复
要做高手 就要抓住每个细节 问题虽小 但是也能引发很多思考!~~~~up!
junyi2003
2009-04-09
打赏
举报
回复
本来是需要New的,为了开发方便。C#给他特权了,没啥可以争论的吗。你可以看做编译器特例过了。
Int Double 也是一样啊。 没啥好争论的吗.....
Myth_NiuNiu
2009-04-09
打赏
举报
回复
楼主你真牛
Myth_NiuNiu
2009-04-09
打赏
举报
回复
楼主你真牛
Myth_NiuNiu
2009-04-09
打赏
举报
回复
[Quote=引用 10 楼 ojlovecd 的回复:]
因为string类要经常使用,所以把它做成了预置类型,预置类型都是可以通过=来直接实例化的,像vrhero说的,这是特权,使用时记得它是引用类型就好了
[/Quote]
学习了
jjf120801
2009-04-09
打赏
举报
回复
大家都没说清楚.我弄懂了与各位分享.
第一,我的问题是为什么不需要new,没说不可以new
第二,这个问题不无聊,它牵涉到隐式转换的问题(关键字:implicit)
第三,正确答案:应为String类里声明了隐式的用户定义类型转换运算符,也就是帮你把new做掉了,如下:
>>隐式转换:
public static unsafe implicit operator String(char *strings)
{
return new String(strings);
}
a12321321321312321
2009-03-12
打赏
举报
回复
[Quote=引用 17 楼 vrhero 的回复:]
引用 15 楼 ProjectDD 的回复:
现在C#还告诉你值对象可以不用写new;
理解错误...谁告诉你“值对象可以不用写new”?
你新建个值类型看需不需要new...都说了内置类型是特权了,和引用类型还是值类型无关...只不过刚好内置类型里只有string一个是引用类型...
[/Quote]
顶
ProjectDD
2009-03-12
打赏
举报
回复
[Quote=引用 24 楼 ojlovecd 的回复:]
引用 15 楼 ProjectDD 的回复:
string s; //OK 已经与值类型一样,申明时已经实例化,但内部机制…
你这样写s是null,还没有实例化
[/Quote]
string 实例的null与 ""有什么区别吗?
int i;这就是已经实例化了,相当于int i=0;存储位置在申明时已经做好了,请你搞清楚..
snowflychen
2009-03-12
打赏
举报
回复
学习了
vbman2003
2009-03-12
打赏
举报
回复
[Quote=引用 51 楼 jhkemail 的回复:]
string不是对象,是变量。。。。
StringBuilder是对象,需要new。。。。
因为string并不是放在堆里的(如果记错大家原谅)
[/Quote]
错! net中所有皆对象
可以:
string s=new string('a',5);
破碎的脸
2009-03-12
打赏
举报
回复
string不是对象,是变量。。。。
StringBuilder是对象,需要new。。。。
因为string并不是放在堆里的(如果记错大家原谅)
ztenv
2009-03-12
打赏
举报
回复
你还可以str1=str2来比较呢;
zhiwei117
2009-03-12
打赏
举报
回复
可能是在父类已经给你new 好了把,堆是由程序员进行空间的自动分配和释放,而栈是由编译器进行自动分配和释放,两者相比较来说栈处理速度要比栈快,一般值类型分配在栈上,而引用类型分配在堆上的
j45kp
2009-03-12
打赏
举报
回复
类的引用要实例化
string是一个基本的数据类型 赋值
ls3697264
2009-03-12
打赏
举报
回复
UP
sjt000
2009-03-12
打赏
举报
回复
string是.net的一个基本的数据类型
基本数据类型都可以直接赋值来创建
wolf1118baby
2009-03-12
打赏
举报
回复
[Quote=引用 1 楼 TkingCN 的回复:]
这个问题 问得太.....
你弄清楚 什么是string 就知道 为什么不需要new勒
[/Quote]
支持
pennymay
2009-03-12
打赏
举报
回复
内置类型都不用new...人家是嫡系,有特权..
加载更多回复(42)
Java中
String
为什么可以不用
new
?
String
str=“abc”:可能创建一个或者不创建对象,如果”abc”在字符串池中不存在,会在java字符串池中创建一个
String
对象(”abc”),然后str指向这个内存地址,无论以后用这种方式创建多少个值为”abc”的字符串...
Java面试题:
String
s=
new
String
(xyz)创建多少个Object对象,为什么?
String
s=
new
String
(xyz)创建多少个Object对象,为什么? 简述 分两种情况, 1)如果
String
常理池中,已经创建"xyz",则不会继续创建,此时只创建了一个对象
new
String
(“xyz”),此时为一个Obeject对象; 2.如果...
Java:
String
类型为什么可以直接赋值?使用
new
String
赋值不可以吗?
字符串常量池(
String
类型为什么可以直接赋值?就和它有关)
String
类是我们平常项目中使用频率非常高的一种对象类型,jvm为了提升性能和减少内存开销,避免字符的重复创建,其维护了一块特殊的内存空间,即字符串池...
String
s =
new
String
("xyz");创建了几个
String
Object?
String
s =
new
String
(“xyz”);创建了几个
String
Object? 两个。第一个对象是字符串常量"xyz" 第二个对象是
new
String
()的时候产生的,在堆中分配内存给这个对象,只不过这个对象的内容是指向...
String
s =
new
String
("xyz")——创建了几个
String
对象?
String
s =
new
String
("xyz")——创建了几个
String
对象?
String
s =
new
String
("xyz");这句话创建了几个
String
Object?答案:(1)如果是第一次运行这句话,则创建两个对象;这句话相当于:
string
s=
new
String
...
C#
110,533
社区成员
642,574
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章