C#问大家一个关于数据类型的问题怎么理解呢?

1.string类型是一个类。当中用一个char[]来存放字符数据。stringstr=new(...);这种初始化方法是可以理解的。那么stringstr=''hell... 1.string类型是一个类。当中用一个char[]来存放字符数据。string str = new(...);这种初始化方法是可以理解的。那么string str =''hello'';怎么理解呢?难道是重载了=号嘛?可是C#不是不允许重载=号嘛?
2.int i =2; 和int i = new int(2): 区别在哪里呢?
展开
 我来答
百度网友eb6ab18
2019-08-19 · TA获得超过585个赞
知道小有建树答主
回答量:1068
采纳率:83%
帮助的人:253万
展开全部
  1. 根据我的理解,string类的=并不是被重载了。你要知道,C#的主要魅力之一就是具有相当丰富的语法糖。string str =“hello"是源代码,当然是越自然越好,编译器在拿到这条语句之后,还会做很多的工作,其中之一就是要翻译成你说的string str = new(...);除此以外,(根据《C# In Depth》的说法),还有很多优化工作,比如说你有两个string变量,都=“hello",那么并不在内存里写入两个hello,而是让这两个变量指向同一个hello以节省内存。总的来说呢,C#的Code是为了让你写出简捷明了的代码,而尽可能把重复性的工作放到编译器里去。

  2. 在没有反编译IL的前提下,我不敢说它和1是完全一样的,但是我推测,它和1的情形是一样的。如果我有时间做个实验,我会告诉你我的结论的。

匿名用户
2019-08-19
展开全部
首先明白一个事,java存在一个常量池,可以用来存储字符串常量。不过不同的版本这个常量池的位置肯定是不同的!

1 创建的字符串变量在内存中的区别
两者看似都是创建了一个字符串对象,但在内存中确是各有各的想法。

String str1= “abc”; 在编译期,JVM会去常量池来查找是否存在“abc”,如果不存在,就在常量池中开辟一个空间来存储“abc”;如果存在,就不用新开辟空间。然后在栈内存中开辟一个名字为str1的空间,来存储“abc”在常量池中的地址值。

String str2 = new String("abc") ;在编译阶段JVM先去常量池中查找是否存在“abc”,如果过不存在,则在常量池中开辟一个空间存储“abc”。在运行时期,通过String类的构造器在堆内存中new了一个空间,然后将String池中的“abc”复制一份存放到该堆空间中,在栈中开辟名字为str2的空间,存放堆中new出来的这个String对象的地址值。

也就是说,前者在初始化的时候可能创建了一个对象,也可能一个对象也没有创建;后者因为new关键字,至少在内存中创建了一个对象,也有可能是两个对象。

2 String类的特性
String类 是final修饰的,不可以被继承。

String类的底层是基于char数组的。

3 两个方面
1)性能效率

String类被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。例如:

String str = “hello";

str = str + "world“;

所以当上文str指向了一个String对象(内容为“hello”),然后对str进行“+”操作,str原来指向的对象并没有变,而是str又指向了另外一个对象(“hello world”),原来的对象还在内存中。

由此也可以看出,频繁的对String对象进行修改,会造成很大的内存开销。此时应该用StringBuffer或StringBuilder来代替String。

而new String()更加不适合,因为每一次创建对象都会调用构造器在堆中产生新的对象,性能低下且内存更加浪费。

2)安全性

对象都是只读的,所以多线程并发访问也不会有任何问题。

由于不可变,用来存储数据也是极为安全的。
————————————————
版权声明:本文为CSDN博主「荒川之神」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43699953/article/details/90437938
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式