从零学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