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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© JYcainiao 中级黑马   /  2015-10-17 21:50  /  589 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 JYcainiao 于 2015-10-17 21:51 编辑

class java {
        public static void main(String[] args) {
                System.out.print("1+2+\"java\"+3+4  打印结果为");
                System.out.println(1+2+"java"+3+4);
                System.out.print("1+2+\"java\"+(3+4)打印结果为");
                System.out.println(1+2+"java"+(3+4));
        }
}
求大神解答啊,打印结果是怎么转换的?强制还是自动?请详细说明
我自己的理解是1+2前面没有类型,+ 是运算符,默认为int 进行求和,碰到字符串之后,自动转换为字符串类型,后面的+3+4  是被  + 连接起来的,这里默认为 连接符 第二个我在3+4小括号一下,应该属于强转吧   
不知道我的理解对不对

4 个回复

倒序浏览
JYcainiao 来自手机 中级黑马 2015-10-18 18:03:10
沙发
求解答啊
回复 使用道具 举报
1+2+"java"+(3+4) // 应该是加了括号之后优先计算3+4 ,由于3和4默认为int 那么+是运算符
1+2+"java"+7 // 然后按照顺序运算,前面的1和2也默认是int类型,一样的相加操作
3+"java"+7 // 当int+String,此时的+是连接符,int自动转换成String类型:"3"+"java"+7
3java7 // 同上,"3java"+"7"
至于您问是怎么变成String类型的,编译器遇到“+”时,JVM会自动创建一个临时的StringBuffer类对象,然后调用append()方法完成字符串的拼接。拼接过程中,调用的都是对象的toString()方法。完成后再将这个临时StringBuffer对象转型为一个String,就是最终的结果。!然后我个人觉得,因为int是数据类型,String是字符串类,之间是不能强制类型转换和自动类型提升的。希望可以帮到你!
回复 使用道具 举报
1+2+"java"+3+4 打印结果为3java34
1+2+"java"+(3+4)打印结果为3java7
回复 使用道具 举报
这只要知道字符和字符串参与运算时的规则,不难理解.
任何数据类型用+与字符串相连接都会产生新的字符串
比如:
  1. System.out.println('a' + 1);                       
  2. System.out.println((char)('a' + 1));
  3. System.out.println("hello"+'a'+1);               
  4. System.out.println('a'+1+"hello");
  5. System.out.println(" 5 + 5 = " + (5 + 5));
复制代码

打印结果:
98
b
helloa1
98hello
5 + 5 = 10
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马