java个人学习笔记 自增自减(前后) 赋值运算(扩展的赋值运算)逻辑运算符

++ 自增前置 :先运算后取值 a=3; b=++a; a=4 ; b=4;

++ 自增后置 :先取值后运算 a=3; b=a++; a=4; b=3;

-- 自减前置  :先运算后取值 a=3; b=--a;a=2;b=2;

-- 自减后置 :先取值后运算 a=3;b=a--;a=2;b=3;

前置的都是先运算后取值 后置的都是先取值后运算。

赋值运算 +

扩展的赋值运算 +=   ,-+  ,*= ,/=,%=

short s = 3;

s=s+2; ①

s+=2; ②

①和②有什么区别?

1是编译不通过的,因为s = s +2;整数2在java中默认是int类型的,s + 2会先被转换成int类型进行计算,得到了一个int类型的结果。然后int类型并不能直接转换成short,所以编译出错。

2是正确的,+=是一个拓展的赋值运算,所以本质是赋值操作。赋值操作是不会改变数据类型的。其实s+=做的是先得到s + 2的结果5,然后把5赋值给s。

逻辑运算符

& 逻辑与 | 逻辑或 !逻辑非

&& 短路与 || 短路或 ^ 逻辑异或

”&“无论左边是不是为真假,右边都会进行运算。”&&“当左边为假,右边不再计算。

”|“ 无论左边是不是为真假,右边都会进行计算。”||“当左边为真,右边不再计算。

^ 异或当左右条件都是为真或者都是为假时,结果为假。追求的是”异“。

int x = 1;

int y=1;

if(x++==2 & ++y==2){

x =7;

}

System.out.println("x="+x+",y="+y);

上面结果是 x=2,y=2 解释 &运算,不管左边是真是假,右边都会参与运算。然而后置的++是先取值后运算。即x++ == 2是不成立的,此时的x为1

int x = 1,y = 1;

if(x++==2 && ++y==2){

x =7;

}

System.out.println("x="+x+",y="+y);

上面的结果是 x=2,y=1 因为&& 运算在左边为假的时候右边已经不参与运算了。所以结果是x=2 y=1(++y == 2没有参与运算)

int x = 1,y = 1;

if(x++==1 | ++y==1){

x =7;

}

System.out.println("x="+x+",y="+y);

上面的结果是x=7,y=2 因为|运算,不管左边是真是假右边都参与运算,所以++y == 1参与运算了。此时if的条件成立执行了x = 7.

int x = 1,y = 1;

if(x++==1 || ++y==1){

x =7;

}

System.out.println("x="+x+",y="+y);

上面的结果是x=7,y=1 ,x++ 是后置的。先取值后运算。所以x++ == 1成立。因为||运算,当左边为真,右边的已经不参与运算了。所以++y==1并不执行。但是或运算已经成立了。所以x=7 ,y=1

时间: 2024-08-02 15:13:42

java个人学习笔记 自增自减(前后) 赋值运算(扩展的赋值运算)逻辑运算符的相关文章

《深入Java虚拟机学习笔记》- 第12章 整数运算

Java虚拟机提供几种进行整数算术运算的操作码,他们执行基于int和long类型的运算.当byte.short和char类型值参与算术运算时,首先会将它们转换为int类型.这些操作码都不会抛出异常,溢出在这里通常可以被忽略. 整数加法 操作码 操作数 说明 iadd (无) 从栈中弹出两个int类型数,相加,然后将所得int类型结果压回栈 ladd (无) 从栈中弹出两个long类型数,相加,然后将所得long类型结果压回栈 将一个常量与局部变量相加 操作码 操作数 说明 iinc vindex

java JDK8 学习笔记——第16章 整合数据库

第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程序. 2.JDBC标准主要分为两个部分:JDBC应用程序开发者接口和JDBC驱动程序开发者接口.应用程序需要联机数据库,其相关API主要在java.sql和javax.sql两个包中. 3.应用程序使用JDBC联机数据库的通用语法: Connection conn = DriverManager.g

java nio学习笔记(一)

位置保留,待用 java nio学习笔记(一),布布扣,bubuko.com

JAVA基础学习笔记(2)

看了几天的视频了,都没时间来写下学习笔记,今天来写下第二次的学习笔记,前几天看的给忘记了,就写最新看到的吧 主要内容:1.类的变量与函数(方法) 2.对象的存储方式 3.新建一个对象及对象的赋值与调用 4.空对象 5.匿名对象 1.类的变量与函数(方法) class Dog      //类名 { String name;  //变量的声明 int age; String color; void bark()   //方法的定义(返回值为空,不带参数) { System.out.println(

java排序学习笔记

前面写了js的排序实现,总得玩玩java的哈. 同样,冒泡.选择.快速(这三个之前实现过也写过文章).堆排序,然后做比较. 主要遇到的难点: - -||想轻松点写个封装计时的逻辑,不想每调用一个排序就要写一个计时代码.想想,还是javascript写起来方便: java的话,我想到的方法是写一个抽象类:抽象出排序方法,实现一个排序计时方法(该方法调用了抽象排序,但在先后排序时加入计时代码[感觉像是aop操作]): 接着所有排序类都继承这个抽象类,并实现排序方法,调用的时候直接调用继承的排序计时方

《深入Java虚拟机学习笔记》- 第4章 网络移动性

Java虚拟机学习笔记(四)网络移动性 <深入Java虚拟机学习笔记>- 第4章 网络移动性,布布扣,bubuko.com

《深入Java虚拟机学习笔记》- 第7章 类型的生命周期

一.类型生命周期的开始 如图所示 初始化时机 所有Java虚拟机实现必须在每个类或接口首次主动使用时初始化: 以下几种情形符合主动使用的要求: 当创建某个类的新实例时(或者通过在字节码中执行new指令,或者通过不明确的创建.反射.克隆和反序列化): 当调用某个类的静态方法时(即在字节码中执行invokestatic指令): 当使用某个类或接口的静态字段,或者对该字段赋值时(用final修饰的静态字段除外,它被初始化为一个编译时常量表达式): 当调用Java API中的某些反射方法: 当初始化某个

《深入Java虚拟机学习笔记》- 第13章 逻辑运算

<深入Java虚拟机学习笔记>- 第13章 浮点运算 <深入Java虚拟机学习笔记>- 第13章 逻辑运算,布布扣,bubuko.com

《深入Java虚拟机学习笔记》- 第2章 平台无关

Java虚拟机学习笔记(二)平台无关 <深入Java虚拟机学习笔记>- 第2章 平台无关,布布扣,bubuko.com