public class Test { public static void main(String[] args) { int i = 1; char ch = 'f'; float c = 1.2f; System.out.println("输出结果是:" + ch + i + c); } }这样输出就是 f11.2 了,因为在字符串采用 + 时,内部采用的是 StringBuilder 来操作的, 把后面都当成是字符串了。 内部的操作可以描述成: new StringBuilder().append("输出结果是:").append(ch).append(i).append(c).toString();public class Test { public static void main(String[] args) { int i = 1; char ch = 'f'; float c = 1.2f; System.out.println("输出结果是:" + (ch + i + c)); } }把后面的加个括号,提高计算的优先级别,这样就先计算括号内的,结果还是 104.2 了。char 类型在内部是个数值类型,进行算术运算时,采用这个字符的 Unicode 码值来映射数值。 'f' 的 Unicode 值是 U+0066 即十进制的 102,就是采用这个值进行计算。ch + i + c ch + i 后,由于 int 的类型比 char 类型的数据范围更宽,就自动提升为 int 类型 再与 c 进行计算,前面的计算结果会自动提升为 float 类型,再与这个 float 进行计 算并得出结果。
你如果想输出f11.2
改为
System.out.println(String.valueOf(ch)+i+c);
public static void main(String[] args) {
int i = 1;
char ch = 'f';
float c = 1.2f;
System.out.println("输出结果是:" + ch + i + c);
}
}这样输出就是 f11.2 了,因为在字符串采用 + 时,内部采用的是 StringBuilder 来操作的,
把后面都当成是字符串了。
内部的操作可以描述成:
new StringBuilder().append("输出结果是:").append(ch).append(i).append(c).toString();public class Test {
public static void main(String[] args) {
int i = 1;
char ch = 'f';
float c = 1.2f;
System.out.println("输出结果是:" + (ch + i + c));
}
}把后面的加个括号,提高计算的优先级别,这样就先计算括号内的,结果还是 104.2 了。char 类型在内部是个数值类型,进行算术运算时,采用这个字符的 Unicode 码值来映射数值。
'f' 的 Unicode 值是 U+0066 即十进制的 102,就是采用这个值进行计算。ch + i + c
ch + i 后,由于 int 的类型比 char 类型的数据范围更宽,就自动提升为 int 类型
再与 c 进行计算,前面的计算结果会自动提升为 float 类型,再与这个 float 进行计
算并得出结果。
ch->int 导致 'f'->102
然后 int-> float
最后导致:
104.2
System.out.println("输出结果是:" + ch + i + c);