从零学java笔录-第9篇 数据类型(三)
凯哥Java 凯哥java 本文是《凯哥陪你学系列之java基础篇》
本节主要内容:
1:模运算涉及到负数结果:
2:加号(+)的几种 用法
3:自增、自减
4:比较运算符
1:模运算涉及到负数结果
接上一篇
System.out.println(-5%2);
System.out.println(5%-2);
运行结果:
结论:在模运算中,正负号和被模数(被除数或是分母)保持一致。
模运算的应用举例:
我们知道任何数模上2后结果不是0就是1.我们可以使用这个特性进行开关算法开发。比如,当模上2是0的时候,表示开关打开,是1的时候表示开关关闭。
2:加号(+)的几种 用法
加号(+)也可以做连接符使用
System.out.println(5+2);
System.out.println("5"+"2");
System.out.println("a"+"b");
System.out.println('5'+'2');
System.out.println('5'+'a');
System.out.println('a'+'5');
System.out.println('a'+'b');
运行结果:
结论:
1:当加号两边是数字类型的时候 此时加号就是运算符的加
2:当加号一边是字符串的时候。此时加号就是连接符了
3:当加号两边是字符的时候,此时加号是将字符对应的ascii码值进行相加运算的
实战:
加号特殊用法:做连接符使用实例。
需求:我想输出
/**
加号(+)特殊用法举例
需求:我想输出 a= 4,b=5.怎么实现
分析:
a= 和b= 是不变的。变化的是4和5
所以我们可以使用加号特殊用法:作为连接符的用法来实现
**/
/*
这个类的名称是Demo
*/
class AddDemo{
public static void main (String [] args){
int a = 4;
int b = 5;
System.out.println("a = " + a +"," + " b = " + b);//在控制台输出 你好!
}
}
3:自增、自减
自增的两种表现形式:
int a = 3;
a++;
++a;
两种区别:
a++:先把a赋值然后在+1
而 ++a.是先+1然后在赋值。
a++运行原理:
具体代码体现:
class AddPlusDemo{
public static void main (String [] args){
int a = 3;
a = a++;//这个相当于 a = a ;然后在 a+1
System.out.println("a = " +(a++));//输出结果为 3
//(++a)这个相当于 a+1 然后在 a=a
System.out.println("a = " +(++a));//输出结果为 5
/**
输出结果为 3和5解释:
a = a++;
其实就相当于
a = a; //这个时候 a =3 的
然后 a = a+1; //这个时候 a= 3+1 = 4了
在输出:
System.out.println("a = " +(++a));
此时的a等于4了而不在等于3了。
而 ++a 是先是 a+1 然后在赋值给a
而此时 a=4所以 a+1 = 4+1 = 5
然后在把5赋值给a
所以 输出的是3和5
**/
}
}
输出结果:
练习题:
int a = 3,b,c;
b=a++;
c=++a;
分别输出a、b、c的值。
练习题代码
class AddPlusDemo2{
public static void main (String [] args){
int a = 3,b,c;
b = a++;//这个相当于 a = a ;然后在 a+1
c = ++a;
System.out.println("a = " +a +", b=" +b +",c="+c);//输出结果为 5
}
}
结果:
思考:
int i=3;
i=i++;
这个时候在输出i的值是3?4?
代码
class IAddDemo{
public static void main (String [] args){
int i = 3;
i = i++;
System.out.println(i);
}
}
输出结果:
分析原因:
i把自己原来的值存放在临时空间temp中。
然后进行+1操作后,i变成了4.
然后在从temp空间中将值赋值给i
所以4被覆盖后成了3.
自减运算:
自减运算同自增运算类似。也分两种情况
a—和—a
区别:
a--:是先赋值在减1
--a:先减1在赋值
练习题:
模仿自增,做自减的练习
4:赋值运算符
赋值运算的几种表现形式:
1:直接赋值 (等号)
2:组合赋值(+=、*=、/=、-=、%=)
+=组合运算:
a+=1等价于:a = a+1;
代码体现:
class ValueDemo{
public static void main (String [] args){
int a =1;
System.out.println(a);//输出 1
System.out.println(a+=1);//输出 2
}
}
输出结果为:
面试题:
short s=3;
s+=4;
s=s+4;
在编译时候会出错吗?有什么不同?
s+=4。编译可以通过。
s = s+4 编译不通过。会报错。精度丢失。
分析原因:
因为+=是java虚拟机自有的运算方式,一次运算的,在jvm中会自动进行类型转换的。是可以通过的。
但是 s =s +4。是两次运算的,这个时候就会自动提升类型到int的而我们知道short类型是有范围的。而s又是一个变量,值是不确定的。
所以,当s+4有可能超出short类型的范围。所以在编译的时候会报精度丢失的错误。
ps:欢迎关注凯哥微信公众号:凯哥Java