public class Test {
public static void main(String[] args) {
int i=3,j=2;
System.out.println(i+"*"+j+"="+i*j);//输出:3*2=6
System.out.println(i+"+"+j+"="+i+j);//输出:3+2=32
System.out.println(i-j); //输出:1
System.out.println(i+"+"+j+"="+i-j);
/*输出:
错误: 二元运算符 '-' 的操作数类型错误
System.out.println(i+"+"+j+"="+i-j);
^
第一个类型: String
第二个类型: int
1 个错误
*/
}
}
第1行输出原因:*优先级高,所以后面先运算是6,然后因为println的参数是i+"*"+j+"="+i*j,这里面有int有字符串,那么就隐式类型转换成都是字符串类型,然后用+,连接字符串,最后以字符串的形式输出。
第2行输出原因:因为println的参数是i+"*"+j+"="+i+j,这里面有int有字符串,那么就隐式类型转换成都是字符串类型,然后用+,连接字符串,最后以字符串的形式输出。
第3行输出原因:因为println是一种名复用方法,可以接受不同类型参数,见图3。这里输出的是一个int值.
第4行输出原因:因为println的参数是i+"*"+j+"="+i-j,这里面有int有字符串,那么就隐式类型转换成都是字符串类型,然后用+,连接字符串,连接到-的时候,前面是string,后面是int。不符合-的运算规则所以报错。(-的情况不比*的情况,优先级不一样)
字符串转换:在连接串时,在+的某一边若不是String,java将其转换为一个String。这种转换对所有基本类型都有定义,对于对象,这种转换是通过调用它的toString方法实现的。将null转换为String,结果为"null"。
例 System.out.println("abc"+null);//abcnull
System.out.println("abc"+false);//abcfalse
在Java编程中,我们常常用 System.out.println(); 来输出字符串,也许我们都已经猜到println()是方法名,但System是什么,out又是什么呢?
其实System是java.lang里面的一个类,如下图:
而out就是System里面的一个静态数据成员,而且这个成员是java.io.PrintStream类的引用。如下图,被关键字static修饰的成员可以直接通过"类名.成员名"来引用,而无需创建类的实例。所以System.out是调用了System类的静态数据成员out。
![](https://i-blog.csdnimg.cn/blog_migrate/908c5c282a624e28c26028ad5331d0ec.png)
println()就是java.io.PrintStream类里的一个方法,它的作用是向控制台输出信息。因为System.out是java.io.PrintStream类的实例的引用,所以可以通过 System.out.println(); 来调用此方法。