15

I have a string:

String c = "IceCream";

If I use toUpperCase() function then it returns the same string, but I want to get "ICECREAM".

Where is the problem?

Sergey Kalinichenko
  • 697,062
  • 78
  • 1,055
  • 1,465
user1091510
  • 247
  • 2
  • 4
  • 8

5 Answers5

34

The code

String c = "IceCream";
String upper = c.toUpperCase();
System.out.println(upper);

correctly prints "ICECREAM". However, the original string c isn't changed. Strings in Java are immutable so all operations on the string return a new copy.

Andreas Wederbrand
  • 35,944
  • 10
  • 64
  • 76
  • See also http://stackoverflow.com/questions/22397861/why-is-string-immutable-in-java – Raedwald Jul 21 '14 at 13:08
  • You could also just reassign the variable **String c = "IceCream"; c = c.toUpperCase();** This should be included in the accepted answer. – ViaTech Apr 29 '18 at 16:07
13

Are you expecting the original variable, c, to have been changed by toUpperCase()? Strings are immutable; methods such as .toUpperCase() return new strings, leaving the original un-modified:

String c = "IceCream";
String d = c.toUpperCase();
System.out.println(c); // prints IceCream
System.out.println(d); // prints ICECREAM
Shantha Kumara
  • 2,991
  • 4
  • 34
  • 50
smendola
  • 2,173
  • 1
  • 14
  • 14
10

The object can't be changed, because String is immutable. However, you can have the reference point to a new instance, which is all uppercase:

String c = "IceCream";
c = c.toUpperCase();
Xaerxess
  • 26,590
  • 9
  • 85
  • 109
Zohaib
  • 6,916
  • 3
  • 25
  • 33
3

You're supposed to use it like this:

String c = "IceCream";
String upper_c = c.toUpperCase();
Luchian Grigore
  • 245,575
  • 61
  • 446
  • 609
1

It could be a problem with your locale. Try:

String c = "IceCream";
return c.toUpperCase(Locale.ENGLISH);
Zwade
  • 1,632
  • 4
  • 16
  • 28