黑马程序员技术交流社区
标题:
纠结的输出结果,请大侠帮忙
[打印本页]
作者:
梁志冰
时间:
2012-8-21 08:37
标题:
纠结的输出结果,请大侠帮忙
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,为什么?
作者:
霍明波
时间:
2012-8-21 08:59
本帖最后由 霍明波 于 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部分装箱拆箱问题 希望对你有帮助
作者:
孔肖
时间:
2012-8-21 09:13
因为定义时,c为int类型,'+'对应的ACII码值为43,所以"="之前其实是 5+43+10 为58,
"="为字符串类型,而字符串与任意类型相加的结果是以字符串形式连接表现的,所以后面的5和10就字符串形式添加到"="之后了。
想要按照正常的运算,System.out.println(a+"+"+b+"="+(a+b)); //5+10=15
作者:
邢金华
时间:
2012-8-21 10:43
'+'为字符型占两个字节 而你定义的c为int型占4个字节 在做运算时‘+’会被自动转换成int类型赋给c 如果相输出+号的话 可以用双引号"+"转化成字符串原样输出
作者:
胡进辉
时间:
2012-8-21 11:55
程序顺序执行,前面int c='+',所以c就是43,所以运行到a+b+c执行的是数学运算,运行到“=”由于是双引号,编译器就处理为字符串,后面所有做的就是字符串的拼接。前面的运行结果为“58=”这个字符串,然后和后面的依次拼接。首先“58=5”,然后最后就是“58=510”了
作者:
芦曦
时间:
2012-8-21 14:07
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(a+c+b+"="+a+b);
System.out.println("c="+c);//[color=Red]字符c的值是43,前面的a+c+b做的是数学的加法运算,结果是58,因为后面的"="是字符串,所以"="后的+a+b被当作是字符串被连接起来了,结果就成了58=510了,如果你想要a和b的值,那么就应该把a+b用小括号。[/color]
}
}
复制代码
作者:
王峰
时间:
2012-8-21 14:39
这里的‘+'号中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,这里计算顺序是从左到右。。。。
作者:
梁志冰
时间:
2012-8-29 23:32
问题已解决,谢谢各位前辈!
作者:
黑马--张帅
时间:
2012-8-30 00:49
在输出语句中有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("输入的符号不合法");
}
}
}
作者:
黑马--张帅
时间:
2012-8-30 00:51
上面代码有误,正确的如下:
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("输入的符号不合法");
}
}
}
作者:
寇龙飞
时间:
2012-8-30 01:38
一是+运算符两边不同类型实参的类型隐式提升。另外一个是,+运算符的代码执行顺序。------------------给自己总结mark下。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2