(三)变量和运算符

时间:2022-10-13 19:32:32

JAVA基础(三)

--变量和运算符

一、数据的类型

Java的基本数据类型有四种:

整数类型、小数(浮点)类型、布尔类型、字符类型。

二、整数类型

当有变量被定义时,就会被分配到内存中去。比如int a=4;内存中就有一块地方,用来存放a的值。那值具体是多大的地方用来存放a呢?这就跟整数的类型有关了。

Byte 占一个字节 表示的范围-128~127 -2^7~2^7-1

Short 占两个字节 表示的范围-3276832767 -2^15~2^15-1

Int 占四个字节 表示的范围-21474836482147483647 -2^31~2^31-1

Long 占八个字节 表示的范围-2^255~2^255-1

 

为什么占n个字节表示的范围就是从-2^(8n-1)2^(8n-1)-1呢?

其实在电脑中,一个字节有八位,一位代表一个数,采用二进制。比如

0

0

0

0

0

0

0

1

 

就代表1.

 

最高位为符号位,0代表正数,1代表负数。

那一个字节能代表的最低的数自然是

1

1

1

1

1

1

1

1

 

-127

 

同理能代表的最大的数为

0

1

1

1

1

1

1

1

 

127

 

那为什么最小的是-128呢?

因为+0-0的表示重复了,

0

0

0

0

0

0

0

0

 

1

0

0

0

0

0

0

0

 

 

显然都表示0,所以就规定用+0来代表0,而-0代表-128,这样规定使补码的运算也刚好吻合,所以byte的表示范围就是-128~127,因此byte a=-128不报错而byte a=128报错。

同理可得各个整数类型的范围。

 

三、小数(浮点)类型

单精度浮点数(float)与双精度浮点数(double)的区别如下:

1)在内存中占有的字节数不同

 

单精度浮点数在机内占4个字节

双精度浮点数在机内占8个字节

2)有效数字位数不同

 

单精度浮点数有效数字8

双精度浮点数有效数字16

3)所能表示数的范围不同

 

单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38

双精度浮点的表示范围:-1.79E+308 ~ +1.79E+308

 

一般只要记住它俩都是表示小数且double表示得更精确就行。

四、布尔类型

Boolean可以表示true或者false

Boolean a=false;

五、字符类型

例如char a=’a’;char a=’嗨’;都是可以的。

char只能存放一个字符,char a=’aa’;会报错。

char Java中是2个字节。java采用unicode2个字节(16位)来表示一个字符。

 

值得一提得是,charint可以根据ascII表进行转换

我们可以int a=’a’;也可以char a=97;此时inta就为’a’所对应的ascII的的值。同理chara就是值为97ascII字符。

同理char a=’a’+1int b=’a’+’b’;这些操作都是可以的。

总之一句话,需要哪个类型的它就会转成哪个类型的,不过注意ascII码表的范围是0~127

 

六、变量详解

1.定义变量:int a;这就是定义变量。

2.初始化变量:int a=45;这就是初始化变量。

3.给变量赋值:比如你先定义了变量int a;之后的a=45;就是给变量赋值。

4.当变量被定义的时候,就已经分配内存了。

5.一般未被赋值的变量直接被使用会报错(如果能,存放的也是垃圾值,也就是随机值)

6.数据类型转换(精度排序byte<short<int<long<float<double)

数据会自动地从低精度转换到高精度(float a=1;可以输出a=1.0)

数据无法从高精度转换到低精度(int a=6.5;将会报错),从高精度到低精度转换需要强转int a=(int)6.5;此时会损失精度,即此时a=6;(向下取整)

Java中默认情况下小数是double类型,float a=3.4;会报错,因为double无法往低精度的float转换,我们可以强转float a=(float)3.4;也可以使用更快捷的方式float a=3.4f;在后面加个f也是强转的意思。同理可以long a=32545l;反正报错的话后面加个l就好了。也不是所有的数都能加一个字母代表强转,大部分时候我们还是使用括号+变量类型转换。例如int a=(int)(9+6.5+3.66);

 

七、运算符

1.基本运算符

基本的+-*/运算法则跟数学的一样,先乘除后加减,有括号先算括号里面的。

比如int a=1+3*(4+1);显然a=16;

值得一提的是/,比如int a=7/4;7/4就会自动被转成int类型了,也就是向下取整等 1

%取模(取余)运算符 int c=a%b;表示定义一个变量,值为a/b的余数,小数也可以用取余符号。

2.自增运算符

A++;等同于a=a+1;

++a;也等同于a=a+1;

一般这两个是没有区别的,当你要达到变量+1的效果时,用哪个都可以。

区别一般就是跟等号的优先级了,a++的优先级低于等号而++a的优先级高于等号:

Int a=56;

Int b=a++;

此时a会先把值赋给b再进行自增(最终a=57,b=56)

Int a=56;

Int b=++a;

a将会先自增再把值赋给b(最终a=b=57);

值得一提的是,自增必须保证自增的数是确定的值,int a; int b=a++;不正确。

int a=5; int b=(a++)++;也不正确。因为不确定编译的时候看到(a++)需要自增,而不知道(a++)是哪个确定的值,虽然我们知道可以算出来,但是计算机没那么聪明。

还有就是自减运算,a--;--a;都是可以的,但是没有自乘运算和自除运算。

3.算数运算符

b+=a;表示b=b+a;

B*=a;表示b=b*a;

同理减号除号取模号都可以。

4.关系运算符

用于判断左右两个数的关系

>(大于)  <(小于)  ==(等于)  !=(不等于)  >=(大于等于)  <=(小于等于)

一般与判断语句放在一起:

If(a==b) System.out.println(“a等于b”);

值得一提:判断的等于是两个等号,一个等号是表示赋值,我们不能if(A=B),把一个赋值语句放在判断框里是不对的,判断框里需要的是bool类型的东西。

If(true)if(1+1==2)都是可以的。

5.逻辑运算符

&&与  ||或  !非

int a=1,b=1,c=2;

if(a==1&&b==1) System.out.println("a=1b=1");

if(a==1||c==1) System.out.println("a=1或者c=1");

if(!(c==1)) System.out.println("c=1本来是不对的,取反之后所以判断框里的内容就 会变成对的");