黑马程序员技术交流社区

标题: 数据类型转换问题<已解决> [打印本页]

作者: 吴扬    时间: 2012-6-13 17:00
标题: 数据类型转换问题<已解决>
本帖最后由 吴扬 于 2012-6-18 01:24 编辑

代码如下:
String sum;
sum = 3+5+"";
System.out.println(sum);
sum是String类型的,为什么打印结果是8呢?第二行3+5不会自动转换成String类型吗?
作者: 郑传庆    时间: 2012-6-13 17:09
java的转换可以分为自动转换和强制转换
自动转换:int型的范围比所有的byte型的合法范围大,这时,JVM就会自动将byte提升了int类型了。
强制转换:如果有这样的表达式:int a =8;byte b =(byte) b;因为byte的范围比int范围小,所以这时就需要对b进行强制的转换。

作者: 王广丛    时间: 2012-6-13 17:10
首先说明+号在java中是有两种含义的,一种表示字符串连接,另一种表示数值的运算。
java中JVM是如何识别这两种含义的呢?
当遇到+号是,JVM首先会判断+号两边的变量或常量是什么类型,
如果+号两边的类型均为非字符串类型,那么JVM就会执行相加的数学操作;
如果两边的类型有字符串类型,则会执行字符串连接的操作。
再来看你的例子:sum = 3 + 5 +"";
首先执行左边第一个加号,因为第一个加号两边均为非字符串类型,所以执行两个数
相加操作,得到8+"";
然后执行第二个加号,由于第二个加号后面是字符串类型,所以JVM会执行字符串相加操作
所以得到的是String sum = 8;
希望能帮到你,求技术加分,急需要技术分参加考试

作者: 王超    时间: 2012-6-13 17:23
运算符'+'可用来实现字符串的连接:
如:String s = "He is "+age+" years old.";
  其他类型的数据与字符串进行"+"运算时,将自动转换成字符串。具体过程如下:
  String s=new StringBuffer("he is").append(age).append("years old").toString();

String sum;
sum = 3+5+"";  // 3+5会自动转化为为字符串和“”相加,然后调用其toString()方法,返回字符串本身
System.out.println(sum);//所以打印结果是8

作者: 马林康    时间: 2012-6-13 18:11
结果是8但是是字符串类型
  1. class  TestDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String sum;
  6.                 sum=3+5+"";
  7.                 System.out.println(sum instanceof String);//输出true
  8.         }
  9. }
复制代码

作者: 吴扬    时间: 2012-6-13 22:08
王广丛 发表于 2012-6-13 17:10
首先说明+号在java中是有两种含义的,一种表示字符串连接,另一种表示数值的运算。
java中JVM是如何识别这 ...

明白了,也就是说“+”这个运算符号首先是要判断两边的数据类型是不是相同,sum = 3 + 5 +"";这句话中第一个“+”号判断两边都是int类型的数据,所以会先把这两个相加;然后第二个“+”号会将左边运算的结果自定转换成为String类型的,这样理解对吧?
作者: 王广丛    时间: 2012-6-13 22:10
吴扬 发表于 2012-6-13 22:08
明白了,也就是说“+”这个运算符号首先是要判断两边的数据类型是不是相同,sum = 3 + 5 +"";这句话中第 ...

是这样的
作者: 吴扬    时间: 2012-6-13 22:26
王广丛 发表于 2012-6-13 22:10
是这样的

谢谢哥们儿了!
作者: 李盼    时间: 2012-6-13 22:31
sum = 3 + 5 + "";  这句代码先算第一个+号,这时候两边都是int,所以+在这里的作用是相加,结果为8,  8和""之间的加号这时候就不是相加了,而是连接符,8会自动装箱为Integer型,打印时就是调用它的toString,变成字符串,然后和""字符串相连接
作者: 黑马刘洋    时间: 2012-6-13 23:44
就是'+'的问题、'+'两边要是非字符串、就执行相加运算、所以3+5=8  而第二个的'+'后面有一个字符串、就成连接作用。。所以输出8



作者: 涂金哲    时间: 2012-6-14 09:41
String sum=5,会出错,整数类型不能直接赋给字符串。string sum=3+5+“ ”,基本类型值运算再和字符串进行连接运算。String sum="h"+3+5结果是“h35“,此时是字符串和3连接,再和5连接。最后进行赋值运算。




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