ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JAVA基础语法(二)

2022-07-15 03:00:46  阅读:182  来源: 互联网

标签:运算符 JAVA int 基础 System 语法 println byte out


JAVA基础语法02

目录

  • 运算符

运算符

运算符种类

  • 算术运算符
  • 赋值运算符
  • 关系运算符 instanceof
    • 对象实例 instanceof 类名,返回布尔值。判断实例是否属于这个类。
  • 逻辑运算符
  • 位运算符 ^ ~ << >> >>>
    • 异或、取反、左移、右移、无符号右移
  • 条件运算符
  • 扩展赋值运算符 +=、%=
  • Java没有幂运算运算符。可以用Math.pow(2,3)表示2^3。此方法参数与返回值都是double。

instanceof子类父类

  • 子类 instanceof 父类 --> true
  • 父类 instanceof 子类 --> false

逻辑运算-短路运算

  • 逻辑运算如果前一个已经计算出结果,后面的一个还没有运算,则不运算后面的逻辑式,如果后面的逻辑式有改变变量值的操作,此操作不会被实现。
int a = 3;
boolean re = false && ++a > 4;
System.out.println(a); //a=3,++a不会被运算
re = true || (a++)>4;
System.out.println(a);//a=3,a++不会被运算,甚至括号都不能让其优先级提高。
  • 与只要一假,或只要一真。就进行短路运算。

位运算

  • 左移 <<
    • 没有无符号左移,凡是左移都是在末尾补0。
    • 约等于乘以二操作。
  • 右移 >>
    • 约等于除以二操作。
    • 补位与符号位一致
  • 无符号右移 >>>
    • 补位补0
    • 无符号右移是针对无符号数的,或者说其返回值是unsigned int的无符号数,若对有符号数的负数进行右移操作,并不能得到除以二的目的,事实上,对于较小的有符号负数右移结果是一个特别大的正数,而对于接近32位极限的特别大的负数,得到的结果是一个特别小的正数,极端情况,对于-2^31进行移位操作得到的结果是0。
  • 以下是对byte类型的-16进行移位操作的范例
byte a=-0b1_0000;//二进制的负数符号在最前面。在0b前面。
System.out.println("a:\t\t"+Integer.toBinaryString(a));
system.out.println("a>>1:\t"+Integer.toBinaryString(a>>1));
System.out.println("a<<1:\t"+Integer.toBinaryString(a<<1));
System.out.println("a>>>1:\t"+Integer.toBinaryString(a>>>1));
System.out.println("a>>>1:\t"+(a>>>1));//无符号右移

// byte y=a<<(byte)1; #error:不兼容的类型: 从int转换到byte可能会有损失。  应该将右式整体进行强制转化为byte类型。

输出结果:

a:		11111111111111111111111111110000
a>>1:	11111111111111111111111111111000
a<<1:	11111111111111111111111111100000
a>>>1:	1111111111111111111111111111000
a>>>1:	2147483640

移位运算符的返回值是int型或者unsigned int类型<实质是最高位是0的int类型的数>,即便运算数是byte类型。
类似byte a = (byte)16<<3是错误的,因为赋值号右边得到的是int类型,而左边是byte,应该添加强制转换。

扩展运算符

  • 偷懒运算符: 扩展运算符无需强制转化就可以从int转为byte类型。
  • 助记: 是+=,而不是=+,=+不是等于一个正数吗,会混淆的。
  • b+=ab=b+a的区别是前者的数据类型为b的数据类型,而后者的数据类型要求a能够自动转换为b的数据类型才能不报错。
int a = 1;
byte b = 1;
b += a; //隐含强制转化,此时b=2,为byte类型。

// b = a+b;此语句错误,右式自动转化我int类型,而int无法自动转化我byte,此处缺少强制转化。

字符串连接符 +

  • + 既是正号,也是加号,还是字符串连接符。这三个用途很容易区分,那么如何判定它们的优先级呢?尤其是字符串连接符和加号!
  • 我的理解: 字符串连接符和加号是相同优先级从左到右计算。当+的一边操作数为字符串时,会将另一半的操作数自动转化为字符串类型。所以,在一系列的字符串和数值类型的“加法”中,当出现第一个字符串后,可以说,后面的所有数值类型都会自动转换为字符串类型,除非有括号提高它们的优先级,不然,仅有第一个字符串出现前的数值类型的加号执行的是数值的加减。
int x = 10;
int y = 20;
int z = 30;
System.out.println(""+x+y);
System.out.println(x+y+"");
System.out.println(x+y+""+z);

输出结果

1020
30
3030

条件运算符

value=x?y:z
其中x是boolean值,若为true,返回y.若为false,返回z。
  • 助记: 先true,再false。和正常人逻辑相同。

运算符优先级

  • 单目运算符优先级高于多目运算符
  • 算术运算符 > 位运算符 > 关系运算符 > 逻辑运算符
  • 所谓功夫再高,也怕菜刀。要想不出错,最好多用括号。

标签:运算符,JAVA,int,基础,System,语法,println,byte,out
来源: https://www.cnblogs.com/WordDealer/p/16479952.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有