A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴扬 中级黑马   /  2012-6-13 17:00  /  2035 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴扬 于 2012-6-18 01:24 编辑

代码如下:
String sum;
sum = 3+5+"";
System.out.println(sum);
sum是String类型的,为什么打印结果是8呢?第二行3+5不会自动转换成String类型吗?

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 从左到右运算,3+5的时候还不知道要变成字.

查看全部评分

10 个回复

倒序浏览
java的转换可以分为自动转换和强制转换
自动转换:int型的范围比所有的byte型的合法范围大,这时,JVM就会自动将byte提升了int类型了。
强制转换:如果有这样的表达式:int a =8;byte b =(byte) b;因为byte的范围比int范围小,所以这时就需要对b进行强制的转换。
回复 使用道具 举报
首先说明+号在java中是有两种含义的,一种表示字符串连接,另一种表示数值的运算。
java中JVM是如何识别这两种含义的呢?
当遇到+号是,JVM首先会判断+号两边的变量或常量是什么类型,
如果+号两边的类型均为非字符串类型,那么JVM就会执行相加的数学操作;
如果两边的类型有字符串类型,则会执行字符串连接的操作。
再来看你的例子:sum = 3 + 5 +"";
首先执行左边第一个加号,因为第一个加号两边均为非字符串类型,所以执行两个数
相加操作,得到8+"";
然后执行第二个加号,由于第二个加号后面是字符串类型,所以JVM会执行字符串相加操作
所以得到的是String sum = 8;
希望能帮到你,求技术加分,急需要技术分参加考试

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
运算符'+'可用来实现字符串的连接:
如: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

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
结果是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 17:10
首先说明+号在java中是有两种含义的,一种表示字符串连接,另一种表示数值的运算。
java中JVM是如何识别这 ...

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

是这样的
回复 使用道具 举报
吴扬 中级黑马 2012-6-13 22:26:34
8#
王广丛 发表于 2012-6-13 22:10
是这样的

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


回复 使用道具 举报
String sum=5,会出错,整数类型不能直接赋给字符串。string sum=3+5+“ ”,基本类型值运算再和字符串进行连接运算。String sum="h"+3+5结果是“h35“,此时是字符串和3连接,再和5连接。最后进行赋值运算。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马