400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

Java基础类型和运算符-创新互联

文章目录

创新互联专注于岑溪企业网站建设,成都响应式网站建设公司,商城网站定制开发。岑溪网站建设公司,为岑溪等地区提供建站服务。全流程按需制作网站,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务变量与常量

变量指程序运行时可变的量,相当开辟了一块内存空间来保存一些数据,类型则是对变量的种类进行划分,使不同的类型变量具有不同的特性

而变量与我们内存的硬件设施密切相关

在这里插入图片描述

JAVA是强类型语言

变量的命名规则

硬性指标 :

  1. 一个变量名只能包含数字, 字母, 下划线
    • Java中的字母和数字的范围更大,字母包括AZ,az,下划线,$,或者在某种语言中表示字母的任何Unicode字符
  2. 数字不能开头.
  3. 变量名是大小写敏感的. 即 num 和 Num 是两个不同的变量.
  4. JAVA中不能使用关键字命名

注意: 虽然语法上也允许使用中文/美元符($)命名变量, 但是 强烈 不推荐这样做.

软性指标 :

  1. 变量命名要具有描述性, 见名知意.
  2. 变量名不宜使用拼音(但是不绝对).
  3. 变量名的词性推荐使用名词.
  4. 变量命名推荐 小驼峰命名法, 当一个变量名由多个单词构成的时候, 除了第一个单词之外, 其他单词首字母都大写.
常量 final 关键字修饰的常量
final int a = 10;
a = 20; // 编译出错. 提示 无法为最终变量a分配值 常量不能在程序运行过程中发生修改 
字面常量

字面常量 ——程序中直接写出来的值

在这里插入图片描述

几种常数赋值方式

public class Candy3 {public static void main(String[] args) {int a=0x123;
        int b=0b1001;
        int c=010;
        System.out.println(a);//291
        System.out.println(b);//9
        System.out.println(c);//8
    }
}
基本类型

在这里插入图片描述

整型 基本整型变量 int

基本语法格式

int a=10;//初始化时并赋值
int a;

内存大小

int 大小为4个字节(byte),与操作系统的和JVM的版本无关,像C语言可能就会受到编译器的影响,是为了实现跨平台

整型的范围

数据溢出问题

在这里插入图片描述

为什么会溢出

在这里插入图片描述

因为2^32-1的数据的大小不够用,还不够表述出马云的个人资产,所以引出了long类型

长整型 long
long a=10L;
long a=10l;
long a=1000_000_000;//可以为数字字面量加下划线,这些下划线只是让人更易读,Java编译器会自动去除这些下划线

为什么要加L呢?

整型的字面量,默认是整型(int),浮点数的字面量,默认是double,所以要加一个L(l)表示它是long类型,否则会发生隐式转换

内存的大小

long类型的大小是8字节

long的数据范围

-263至263-1

短整型 short
short a=20;

内存大小

2个字节 数值范围是 -215至-215-1

基本没啥用

比特型 byte
byte a=1;

内存大小

一个字节 ,数值访问 -128到127

主要用于文件和网络的传输

浮点数 float和double
float f=1.2f;
float f=1.2F;
double d=1.2;

在JAVA中直接写出来的字母常量的浮点数都是double类型的,所以在flaot需要特别的声明一下

内存大小

float的大小为4个字节,double的字节是8个字节 在内存中采用指数的形式来模拟

浮点数存储规则

根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:

(-1)^S * M * 2^E

举例来说:

十进制的5.0,写成二进制是 101.0 ,相当于 1.01×2^2 。

那么,按照上面V的格式,可以得出s=0,M=1.01,E=2。

十进制的-5.0,写成二进制是 -101.0 ,相当于 -1.01×2^2 。那么,s=1,M=1.01,E=2。

IEEE 754规定:

在这里插入图片描述

IEEE 754对有效数字M和指数E,还有一些特别规定。

至于指数E,情况就比较复杂。

然后,指数E从内存中取出还可以再分成三种情况:

E不全为0或不全为1

这时,浮点数就采用下面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将 有效数字M前加上第一位的1。

比如:0.5(1/2)的二进制形式为0.1,由于规定正数部分必须为1,即将小数点右移1位,则为1.0*2^(-1),其阶码为-1+127=126,表示为 01111110,而尾数1.0去掉整数部分为0,补齐0到23位00000000000000000000000,则其二进 制表示形式为:在这里插入图片描述

E全为0

这时,浮点数的指数E等于1-127(或者1-1023)即为真实值, 有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。

E全为1

这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s);

关于3*0.1==0.3

在这里插入图片描述

如何解决

如果的基本整数和浮点数的精度不能满足需求,可以使用java.math包下两个很有用的类

  1. BigInteger 实现任意精度的整数运算

    • BigInteger a=new BigInteger(“123”); //第一种,参数是字符串
    • BigInteger a=BigInteger.valueOf(123); //第二种,参数可以是int、long
  2. BigDecimal 实现任意精度的浮点数运算

    • BigDecimal 常用的构造方法如下。

      • BigDecimal(double val):实例化时将双精度型转换为 BigDecimal 类型。

      • BigDecimal(String val):实例化时将字符串形式转换为 BigDecimal 类型。

    BigDecimal add(BigDecimal augend)    // 加法操作
    BigDecimal subtract(BigDecimal subtrahend)    // 减法操作
    BigDecimal multiply(BigDecimal multiplieand)    // 乘法操作
    BigDecimal divide(BigDecimal divisor,int scale,int roundingMode )    // 除法操作

在这里插入图片描述

三种特殊的double

在这里插入图片描述

字符型 char
char a='a';
char b='A';
char c='哈';

内存大小

布尔类型 boolean
boolean b=true;
boolean b=false;

注意点

类型转换

在这里插入图片描述

隐式类型提升

对于这种转换但是无信息丢失的情况我们的隐式类型转换是会自动发生的

int a=10;
long b=20;//发生了隐式类型提升
long c=a+b;//发生了隐式类型提升
强制类型转换

对于转换可能存储精度损失的情况我们必须采用强制类型转换

小类型 变量=(小类型) 大类型数值
int a = 0;
double b = 10.5;
a = (int)b;
int a = 10;
byte a=20;
byte b=256;//发生编译错误,因为byte的值位-128到127 所以需要强制类型转换
boolean b = false;
b = (boolean)a; // 编译出错, 提示不兼容的类型

关于一个byte和byte的现象

byte a=20;
byte b=30;
byte c=a+b;//会发生编译报错

可以写成

final byte a=20;
final byte b=20;
byte c=a+b;
运算符 算数运算符 基本四则运算 + - * \ %增量赋值运算符 += - = *= /= %=

可以在赋值中使用二元运算符,是一种很方便的简写形式

int x=1;
 x+=2;
 x=x+2;
int x=1;
 x+=3.5;//相当于(int)(x+3.5)
自增/自减运算符 ++ –
int a = 10;
int b = ++a;
System.out.println(b);
int c = a++;
System.out.println(c);

结论:

关系运算符

关系运算符主要有六个:
== !=< ><= >=

int a = 10;
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);
System.out.println(a >= b);

注意: 关系运算符的表达式返回值都是 boolean 类型

逻辑运算符

逻辑运算符主要有三个:
&& || !
注意: 逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是 boolean,如果操作数不是boolean,那么编译不通过

逻辑与 &&
规则: 两个操作数都为 true, 结果为 true, 否则结果为 false.

int a = 10;
int b = 20;
int c = 30;
System.out.println(a< b && b< c);

逻辑或 ||
规则: 两个操作数都为 false, 结果为 false, 否则结果为 true

int a = 10;
int b = 20;
int c = 30;
System.out.println(a< b || b< c) 

逻辑非 !
规则: 操作数为 true, 结果为 false; 操作数为 false, 结果为 true(这是个单目运算符, 只有一个操作数).

int a = 10;
int b = 20;
System.out.println(!a< b); 
&&与||都是短路运算符

&& 和 || 遵守短路求值的规则.

System.out.println(10 >20 && 10 / 0 == 0); // 打印 false
System.out.println(10< 20 || 10 / 0 == 0); // 打印 true

我们都知道, 计算 10 / 0 会导致程序抛出异常. 但是上面的代码却能正常运行, 说明 10 / 0 并没有真正被求值.
结论:

& 和 |

& 和 | 如果操作数为 boolean 的时候, 也表示逻辑运算. 但是和 && 以及 || 相比, 它们不支持短路求值.

System.out.println(10 >20 & 10 / 0 == 0); // 程序抛出异常

System.out.println(10< 20 | 10 / 0 == 0); // 程序抛出异常 

Java支持的三位运算符

condition ? expression1 : expression2
 int max=a>b?a:b; //返回a 和 b中较大的那个值
位运算符

java 中对数据的操作的最小单位不是字节, 而是二进制位.
位运算符主要有四个:
& | ~ ^

位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位的每一位依次进行计算

移位运算

移位运算符有三个:
<< >>>>>
都是按照二进制位来运算.

  1. 左移 1 位 , 相当于原数字 * 2. 左移 N 位 , 相当于原数字 * 2 的 N 次方 .
  2. 右移 1 位 , 相当于原数字 / 2. 右移 N 位 , 相当于原数字 / 2 的 N 次方 .
  3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
  4. 移动负数位或者移位位数过大都没有意义
int a = 0x10;
System.out.printf("%x\n", a<< 1);
// 运行结果(注意, 是按十六进制打印的)
20

int a = 0x10;
System.out.printf("%x\n", a >>1);
// 运行结果(注意, 是按十六进制打印的)
8
int b = 0xffff0000;
System.out.printf("%x\n", b >>1);
// 运行结果(注意, 是按十六进制打印的)
ffff8000

int a = 0xffffffff;
System.out.printf("%x\n", a >>>1);
// 运行结果(注意, 是按十六进制打印的)
7fffffff

关于移位大小的规定

运算符的优先级

先看一段代码

System.out.println(1 + 2 * 3);
结果为 7, 说明先计算了 2*3 , 再计算 1+

另外一个例子

System.out.println(10< 20 && 20< 30);

此时明显是先计算的 10< 20 和 20< 30, 再计算 &&. 否则 20 && 20 这样的操作是语法上有误的(&& 的操作数只能是boolean).
运算符之间是有优先级的. 具体的规则我们不必记忆. 在可能存在歧义的代码中加上括号即可.

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享题目:Java基础类型和运算符-创新互联
分享网址:http://mbwzsj.com/article/jsjes.html

其他资讯

让你的专属顾问为你服务