Java基础语法3
Java学习路线Day4
一、运算符
1.算术运算符
+ - * / % ++ --
加 减 乘 除法取整 除法取余 自加 自减
首先了解几个概念:
操作数:参与运算的常量或变量值。
操作符:将参与运算的常量或者变量值连接起来的符号。
表达式:由操作数和操作符构成并且符合Java语法规范的式子。根据操作符的不同,可以称作不同的表达式(算术表达式,逻辑表达式等)。
重点:一个表达式的最终结果的数据类型是由参与表达式中的最大的数据类型决定的。
示例:
public class SuanShuOptDemo1 {
public static void main(String[] args) {
int a = 40;
int b = 20;
System.out.println(a + b);//加
System.out.println(a - b);//减
System.out.println(a * b);//乘
System.out.println(a / b);//取整数部分,不能除0
//如果我就是想让a/b整除具有小数部分
//只要让其中一个转换为float类型即可
System.out.println((float) a / b);
System.out.println(a % b);//取余数部分
//自加自减单独使用时,++在变量前面和后面结果都一样
System.out.println(a++);
System.out.println(++a);
System.out.println(a--);
System.out.println(--a);
//自加自减混合使用时,++在变量前面,先进行赋值操作,
//再自加1;++在变量后面,先自加1,再进行赋值操作。
}
}
1.System.out.println((float) a / b);
为什么输出为2.0?
就是因为一个表达式的最终结果的数据类型是由参与表达式中的最大的数据类型决定的。
2.+ - * / %都是使用变量来计算。++和- -是对变量本身计算,使变量本身加1或减1。(注意a++是先使用a作为语句的参数,再自加。++a是先自加,再使用加过的a值作为参数。)
如下代码应该输出什么?
public class SuanShuOptDemo3 {
public static void main(String[] args) {
int a = 4;
int b = (a++)+(++a)+(a*10);
System.out.println("a:"+a);
System.out.println("b:"+b);
}
}
a的值只需要看a经过了几次自加,两次,所以就是4+2=6.
b的值分几步来看:
int b = (a++)+(++a)+(a*10)
1.第一个括号内是a++,所以先把a的值参与到运算,即第一个括号内取值为4;
2.取值之后a自加,此时a=5;
3.第二个括号内是++a,所以先让a自加,a=6,然后再取a的值,也就是说第二个括号内取值为6,;
4.此时a是6,所以a*10=60;
5.b=4+6+60=70;
这里还需要补充 + 加号的用法:
1.字符相加
public class DataTypeDemo4 {
public static void main(String[] args) {
System.out.println('a');//单独打印字符,就是打印字符本身
//当字符与数值相加或者两个字符相加时,会将字符对应的ASCII码值取出来进行运算
System.out.println('a' + 1);
System.out.println('a' + 'b');
}}
2.连接字符串
从左往右运算,一个加号一个加号地分析
1.加号两边,只要有一边是字符串,那么就做字符串的拼接运算
2.加号两边如果没有字符串,就做加法运算
3.可以使用小括号调整运算顺序
4. 单个字符参与运算就是使用ASCII值
public class DataTypeDemo5 {
public static void main(String[] args) {
System.out.println("hello"+'a'+1);
System.out.println('a'+1+"hello");
System.out.println("5+5="+(5+5));
System.out.println(5+5+"=5+5");
}
}
2.赋值运算符
= += -= /= %=
int a = 40;
int b = 20;
System.out.println(a += b);
System.out.println(a -= b);
System.out.println(a *= b);
System.out.println(a /= b);
System.out.println(a %= b);
}
}
赋值运算符与算术运算符不同,其作用于变量本身(计算后为变量本身赋值)。如上程序,变量a的值经历了40 —>60---->40—>800—>40—>0的变化过程。
题目:
short s1=1; s1 = s1+1;
short s2=1;s2+=1;
上面两个代码有没有问题,如果有,哪里有问题?
第一行有问题,s1先参与运算,提升数据类型到int型,再用short类型的s1接收,属于小盒子装大象报错。
第二行没有问题是因为赋值运算符隐含了强制类型转换的过程。即:
s+=1 不等价于 s=s+1
s+=1 等价于 s=(s的数据类型)(s+1)