-1

我正在编写一段代码来逐字反转字符串(输入:Java 很有趣;输出:有趣的是 Java),当我遇到一个问题时:如何将字符串变量添加到字符类型变量中。代码正在运行完美,但这怎么可能?有人,请给我解释一下。提前致谢。

import java.io.*;
public class numberof {
public static void main(String args[])throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String str1,str2="",str3="";
str1=br.readLine()+" ";
for(int i=0;i<str1.length();i++){
char x=str1.charAt(i);
if(x==' '){
    str2=str3+" "+str2;
str3="";
}
else{
    str3=str3+x;   //HERE IS THE QUESTION PART(STRING+CHAR)

   }
 }
 System.out.println(str2);  
 }

  }
4

2 回答 2

6

Achar可以隐式转换为 a String。如果 Java 不这样做,您将不得不编写如下:

str3 = str3 + String.valueOf(x);

哎呀,在Java中,甚至+运算符都被重载了。String没有它,你将不得不这样写:

str3 = str3.concat(String.valueOf(x));

因此,隐式类型转换使您可以轻松编写代码。并且您很容易阅读和理解相同的代码:

str3 = str3 + x;
//understanding: the string 'str3' is being joined with the character 'x'

但是请注意,并非所有内容都可以隐式转换。例如,这不起作用:

char y = str3 + x; //ERROR: cannot cast string to char!

隐式转换仅适用于可以将基本类型转换为更高级类型而不会丢失数据的情况。在这里,aString可以被认为是一串字符(想想那些字母珠手镯)。所以 achar可以被认为是一个只有一个字符的字符串。因此,+操作员所做的就是将此字符添加到另一个充满字符的字符串的末尾。

于 2013-07-23T04:07:17.097 回答
2

当数据类型之间的转换发生冲突时,编译器总是选择较大的数据类型(在你的情况下是字符串)。这称为隐式类型转换。

假设您有 2 罐 1 升容量,另一罐 2 升。将 1 升罐中的内容物倒入 2 升罐中始终是安全的。

于 2013-07-23T04:06:36.910 回答