首页 > 试题广场 > 下面程序的输出是?
[单选题]
下面程序的输出是:()
String x="fmn";
x.toUpperCase();
String y=x.replace('f','F');
y=y+"wxy";
System.out.println(y);
  • FmNwxy
  • fmnwxy
  • wxyfmn
  • Fmnwxy

69个回答

添加回答
String x="fmn";  “fmn”是在常量池里的不可变对象。
x.toUpperCase();   在堆中new一个"FMN"对象,但无任何引用指向它。
String y=x.replace('f','F'); 在堆中 new一个"Fmn"对象,y指向它。
y=y+"wxy"; 在堆中 重新new一个"Fmnwxy"对象, 修改y指向,现在y指向它。


编辑于 2016-07-14 16:48:25 回复(6)
String x="fmn";
x.toUpperCase();
System.out.println(x);
x = x.toUpperCase();
System.out.println(x);

输出:
fmn
FMN

发表于 2015-11-19 16:55:31 回复(11)
本题主要考察String对象的不可变性。
toUpperCase()会对当前对象进行检查 如果不需要转换直接返回当前对象,否则new一个新对象返回;
replace()如果两个参数相同,则直接返回,否则new一个新对象,所以这里y指向"Fmn";
y=y+"wxy" 这里修改y所指向的字符串对象,让它由指向"Fmn"变成指向"Fmnxyz".
发表于 2015-12-12 20:57:40 回复(1)
D 使用String str=“xxx”时,JVM会在字符串常量池中创建“xxx”,即在编译时就可计算出来的字符串值,是不可改变的。如果改变str就会在字符串常量池里产生新的实例。 题目里调用toUpperCase()确实返回了大写字符串,但是没有覆盖原来的,所以字符串还是小写的。
发表于 2016-01-10 17:18:28 回复(0)
String对象是不可变的。String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容,而最初的String对象则未变。

发表于 2016-01-22 14:21:52 回复(1)
炫头像
x.toUpperCase()会返回x字符串的大写形式,但是没有对原x进行覆盖
x= x.toUpperCase()就可以对原x进行覆盖
发表于 2016-06-02 13:05:44 回复(0)
记住String对象的不可变性就能解决这个问题。所以String的方法都不会改变原对象,而是新创建对象(如果需要创建的话)。
查看String.toUpperCase()方法的源码可以得知,该方法首先判断是否有需要转换为大写的字符,如果没有,return this;否则返回新生成的字符串。所以x.toUpperCase()无论如何都不会改变x的值。
x.replace会替换掉字符串中相应的字符。y=x.replace('f', 'F');后y=Fmn
结果选D
发表于 2016-04-02 23:08:31 回复(0)
这里主要想说明String对象是不可变得
String x="fmn";
x.toUpperCase();
这里x还是"fmn"
x = x.toUpperCase();
这里的x = "FMN" 相当于new一个新的String对象
发表于 2017-06-21 10:13:02 回复(0)
String对象是不可变的!
不可变对象的状态在创建之后就不能发生改变,任何对它的改变都应该产生一个新的对象。
1、x.toUpperCase(); //并没有改变x,而是 new一个新的String对象并返回。只不过这里并没有对返回的对象进行处理。
2、如果是x= x.toUpperCase(); // new一个新的String对象,x指向它。顺便提下,x是对返回的新String对象的引用,不是对象本身。
编辑于 2017-06-12 00:07:21 回复(0)
这道题就是考值传递,虽然string是引用数据类型,但是当做参数时还是当做基本数据类型的,toUpperCase方法一经弹栈,string就仍然是其原值.
发表于 2016-09-18 00:21:03 回复(0)
借用牛客800598号的答案:
String x="fmn";
x.toUpperCase();
System.out.println(x);
x = x.toUpperCase();
System.out.println(x);

输出:
fmn
FMN    String对象本身不可改变,但是并不是String对象的引用不能改变,这里x= x.toUpperCase();改变了引用,对对象本身没有改变
发表于 2016-09-03 21:53:03 回复(0)
toUpperCase的意思是将所有的英文字符转换为大写字母。
发表于 2015-11-21 12:26:49 回复(0)
第二行代码:x.toUpperCase();
调用该方法 x 的值不变,结果仍然是“fmn”
除非写成:
x = x.toUpperCase();
编辑于 2018-02-28 15:53:49 回复(0)
x.toUpperCase()并没有new一个新对象接收这个值,如果是String x = x.toUpperCase(); 再输出x的话就会全部转化成大写,这样明白了吧,考察眼力劲
发表于 2017-09-09 11:46:17 回复(0)
String对象不可变!!!!toUpperCase()会对当前对象进行检查 如果不需要转换直接返回当前对象,否则new一个新对象返回;
replace()如果两个参数相同,则直接返回,否则new一个新对象,所以这里y指向"Fmn";
发表于 2017-06-06 13:33:41 回复(0)
String 一当创建不可再被修改
发表于 2015-11-17 22:22:58 回复(0)
首先String是静态变量 String x =“fmn”就在常量池中创建了一个fmn对象 x.toUpperCase();只是创建了变量FMN,但没有任何引用指向FMN, String y=replace('f','F');则是重新创建了Fmn对象,y指向它。 最后y=y+"wxy";在堆中重新创建了一个对象“Fmnwxy”并使y指向“Fmnwxy”
发表于 2018-11-10 19:57:05 回复(0)
这个题创建了几个对象,分别在堆中还是方法区中的常量池中,帮忙解析一下

发表于 2018-11-05 11:23:00 回复(0)
第二句x字符串转为大写是“原地操作”,并没有对x元数据进行更改,必须要再赋值给x才行。
发表于 2018-10-20 10:08:34 回复(0)
这个题目中
y=y+"wxy";
其实就相当于stringbuilder.append("wxy");


发表于 2018-09-17 21:13:28 回复(0)

扫一扫,把题目装进口袋

牛客网,程序员必备求职神器

扫描二维码,进入QQ群

扫描二维码,关注牛客网公众号

  • 公司地址:北京市朝阳区大屯路东金泉时代3-2708北京牛客科技有限公司
  • 联系方式:010-60728802(电话) admin@nowcoder.com
  • 牛客科技©2018 All rights reserved
  • 京ICP备14055008号-4
  • 京公网安备 11010502036488号