黑马程序员技术交流社区

标题: String类中大小写转换问题??? [打印本页]

作者: 黑马姜硕    时间: 2011-12-16 23:25
标题: String类中大小写转换问题???
字符串类型只要赋值后就不可以改变了 那么下面的代码用ToLower转换完的结果怎么还是可以赋给字符串变量本身呢就是还是把大写的"JAVA"转换后的结果也就是小写的"java"给了str1 那str1值不就变了么?????
string str="java"
string str1="JAVA"
str=str.ToLower()
str1=str1.ToLower()

作者: 周胜    时间: 2011-12-16 23:37
String 声明的是一个地址,当你改变它的值时,不是重新给它赋值,而是重新申请了一个地址。
也就说:你是申请另外一个变量。

作者: 黑马姜硕    时间: 2011-12-17 13:35
那么这两个地址都在内存中存着么 下次再调用str1 调用的是那个地址的值呢
作者: 周胜    时间: 2011-12-18 13:41
黑马姜硕 发表于 2011-12-17 13:35
那么这两个地址都在内存中存着么 下次再调用str1 调用的是那个地址的值呢

str1的地址已经被改变了,此地址指向"java"这个字符串,下次调用就调用这个地址。。
作者: 陆亚    时间: 2011-12-18 23:23
涉及到变量与地址的关系。对字符串运算时,实际上是在内存中临时申请一个匿名变量,str=str.ToLower();
内存中有一个临时的变量保存str.ToLower()的值,结束后str重新指向这个临时变量的地址,因此看上去好像是可以重新赋值。
内部经过这个过程,效率不是太高。
作者: 张大福    时间: 2011-12-20 14:25
标题: RE: String类中大小写转换问题???
我用通俗的方法说吧。
有一张方桌,桌子上放了一块牌子,牌子上写明这是张三的。但是张三想要圆桌,应该怎么办?这里有两种办法:

第一种方法:把方桌修改成圆桌。
第二种方法:另外做张圆桌,把牌子放在圆桌上,这圆桌就是张三的了。

一般类的处理函数用的是第一种方法,而字符串的处理函数用的就是第二种方法,切记切记。
下面举例说明,请注意看注释:

第一个例子:
string str="Java";//在方桌上放了一张牌子,牌子上写着 str。str是一个人,这个人拥有一张方桌。
str.ToLower();//另外做了一张圆桌,但没有把牌子放在上面,所以str这个人拥有的还是方桌,因为牌子在方桌上。

所以str的值还是''Java",str值并没有改变。


第二个例子:
string str="Java";//在方桌上放了一张牌子,牌子上写着 str。str是一个人,这个人拥有一张方桌。
str=str.ToLower();//另外做了一张圆桌,并把牌子放在上面,所以str这个人拥有的就是圆桌了,因为牌子在圆桌上。

所以str的值"java",str的值已经改变了。
作者: 丰亚彬    时间: 2011-12-21 10:31
首先string是一个类,这个和其他的一些基本的数据类型不同,string是引用类型,而如int double float等是值类型,string在内存中存储的不是某一个特定的字符串,而是一个指向字符串的引用,之所以说赋值后内容不能更改,不是因为string的这个变量不能更改,而是它指向的那个字符串不能更改,如果这个string的变量已经指向了一个特定的字符串,如果这是它指向另一个字符串,那么这个string的变量的值就会改变,那么你如果理解了上面的,你的问题就很容易了,首先你要知道toLower()方法返回一个字符串,相当于在原有的字符串基础上进行加工处理后又重新生成了另一个字符串,我们用原来指向原字符串的那个string变量去引用那个处理过新生成的字符串,最后显示的结果就是,我们用的还是原来的那个string变量,只是它引用的不再是原来的字符串(大写),而是处理过的新生成的字符串(转换成小写).....
作者: 刘冠杰    时间: 2011-12-26 23:40
其实刚开始你就误解了,并不是说字符串类型的值不可以改变,而是,一单你声明了一个变量为字符串类型,那么它就在同一个方法或者属性里边只能是字符串类型,不能再给它重新声明成其他的数据类型!

而你所说的字符串的值不可以改变,这点是误解的,字符串的值和平时我们声明的数据类型是一样的,就像Int类型,你刚开始可以给一个变量a赋予1个值,然后可以再对它的值进行重新赋值,那么它原来的值也就被新赋的值给覆盖了!
如:
int a=10;
a=20;
像这样,刚开始a赋予的值是10,后来依然可以重新给它赋值,只是不能重新声明a为其他类型了。
如:
int a=10;
string a;
这样就是错的了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2