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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁志冰 中级黑马   /  2012-8-21 08:37  /  2563 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo1
{
   public static void main(String[] args)
   {
      int a=5;
      int b=10;
      int c='+';
      System.out.println(a+c+b+”=”+a+b)





   }



}









输出结果为58=510,为什么?

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1 加油

查看全部评分

10 个回复

倒序浏览
本帖最后由 霍明波 于 2012-8-21 09:07 编辑

C为字符,当运算的时候转化成int型,‘+’对应的数为43,5+43+10=48;而“=”号为字符串,所以后面的a与b转化成字符串并通过字符串连接,510  如果你你想要数的话  应该把他们括起来 给你一个例子。
class Demo1
{
   public static void main(String[] args)
   {
        int a=5;
        int b=10;
            int c='+';
           System.out.println(a+c+b+"="+a+b);

        System.out.println((int)'+');
        System.out.println(a+b);
        System.out.println(a+b+c+"="+(a+b));
        }
}
我是这么理解的 ,看毕老师String部分装箱拆箱问题 希望对你有帮助

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报
因为定义时,c为int类型,'+'对应的ACII码值为43,所以"="之前其实是 5+43+10 为58,
"="为字符串类型,而字符串与任意类型相加的结果是以字符串形式连接表现的,所以后面的5和10就字符串形式添加到"="之后了。
想要按照正常的运算,System.out.println(a+"+"+b+"="+(a+b)); //5+10=15

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报
                '+'为字符型占两个字节  而你定义的c为int型占4个字节 在做运算时‘+’会被自动转换成int类型赋给c   如果相输出+号的话 可以用双引号"+"转化成字符串原样输出

回复 使用道具 举报
程序顺序执行,前面int c='+',所以c就是43,所以运行到a+b+c执行的是数学运算,运行到“=”由于是双引号,编译器就处理为字符串,后面所有做的就是字符串的拼接。前面的运行结果为“58=”这个字符串,然后和后面的依次拼接。首先“58=5”,然后最后就是“58=510”了
回复 使用道具 举报
  1. class Demo1
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.        int a=5;
  6.        int b=10;
  7.        int c='+';
  8.       System.out.println(a+c+b+"="+(a+b));
  9.       System.out.println(a+c+b+"="+a+b);
  10.       System.out.println("c="+c);//[color=Red]字符c的值是43,前面的a+c+b做的是数学的加法运算,结果是58,因为后面的"="是字符串,所以"="后的+a+b被当作是字符串被连接起来了,结果就成了58=510了,如果你想要a和b的值,那么就应该把a+b用小括号。[/color]
  11.       }
  12. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报
王峰 中级黑马 2012-8-21 14:39:22
7#
这里的‘+'号中ASCII中十进制数为 43,
System.out.println(a+c+b+"="+a+b);
a+c+b = 5+'+'+b=5+43+10=58
a+c+b = 58+"="+a+b = "58="+a+b = "58=5"+b="58=510";
整数和字符相加,字符自动转换为整数,隐式转换,结果整数
整数和字符串相加,整数自动转换为字符串,结果为字符串
a+c+b+"="+a+b,这里计算顺序是从左到右。。。。

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报
问题已解决,谢谢各位前辈!
回复 使用道具 举报
在输出语句中有String类型“=”整个括号中的内容被自动提升为字符串类型。你定义的int c=‘+';ASCII码值为43,所以最后输出结果为:58=510.如果你要输出10+5=15的效果可以用这种方法:
class Demo1
   {
           public static void main(String[] args)
           {
                   int a = 5;
                   int b = 10;
                   char c = '+';
                   switch (c)
                   {
                      case '+':
                             System.out.println(a+"+"+b+"="+(a+b));
                          break;
                          case'-':
                                  System.out.println(a+"-"+b+"="+(a+b));
                          break;
              case'*':
                                  System.out.println(a+"*"+b+"="+(a+b));
                          break;
                      case'/':
                                  System.out.println(a+"/"+b+"="+(a+b));
                          break;
                          case'%':
                                  System.out.println(a+"%"+b+"="+(a+b));
                          break;
                          default:
                                  System.out.println("输入的符号不合法");
                   }
           }
   }
回复 使用道具 举报
上面代码有误,正确的如下:
class Demo5
   {
           public static void main(String[] args)
           {
                   int a = 5;
                   int b = 10;
                   char c = '+';
                   switch (c)
                   {
                      case '+':
                             System.out.println(a+"+"+b+"="+(a+b));
                          break;
                          case'-':
                                  System.out.println(a+"-"+b+"="+(a-b));
                          break;
              case'*':
                                  System.out.println(a+"*"+b+"="+(a*b));
                          break;
                      case'/':
                                  System.out.println(a+"/"+b+"="+(a/b));
                          break;
                          case'%':
                                  System.out.println(a+"%"+b+"="+(a%b));
                          break;
                          default:
                                  System.out.println("输入的符号不合法");
                   }
           }
   }
回复 使用道具 举报
一是+运算符两边不同类型实参的类型隐式提升。另外一个是,+运算符的代码执行顺序。------------------给自己总结mark下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马