Java基础学习——数据类型与运算符

知识点来源于《零基础学Java》等书籍。

周末事情很多,这部分拖了两天了。

第3章 数据类型

Java语言是一个强调数据类型的语言,在声明任何变量的同时,必须将该变量定义为一种数据类型。

Java的数据类型分为基本的数据类型和对象类型(也称引用数据类型),本章不讨论对象数据类型。

基本的数据类型有以下四种,包含4种整型、1种字符型、2种浮点型、1种布尔型。除开这几种类型,其他都为对象类型。

3.1 整型

整型就是整数类型,无小数点的数字,可以是整数,也可以是负数。在Java中,整型主要有4种:字节型(byte)、短整型(short)、整数型(int)、长整型(long)。

3.1.1字节型

byte用一个字节表示整数值,它的取值范围介于-128~127之间。通常这种类型的整型数据拥有多种进制。但无论是何种进制,在输出 控制台上,系统都会将其自动转化为十进制。


源代码
运行效果

3.1.2 短整型

short用两个字节表示整数值,其整数值介于-32768~32767之间。它有八进制、十进制和十六进制3种表示方法,其表示方法与字节型一样。

3.1.3 整数型

整数型又称int型,用4个字节来表示数值,其整数值介于-2147483648~2147483647之间。整数型拥有以上各种进制,表示方法与字节型相同。

3.1.4 长整型

长整型long用8个字节表示整数型,其数值介于-9223372036854775808~9223372036854775807之间。它所有特性基本与前几种相同,唯一的不同是,长整型的数据后面有一个“L”字母,这个也是从表现形式上区别于其他整型的最大特征。

01        public class Long                                                   //定义一个Long类
02        {
03            public static void main(String[] args)                          //主方法
04            {
05                long  x=22L;                                                //十进制
06                long  y=022L;                                               //八进制
07                long  z=0x22L;                                              //十六进制
08                //输出相应十进制的值
09                System.out.println("转化成十进制,x="+ x);
10                System.out.println("转化成十进制,y="+ y);
11                System.out.println("转化成十进制,z="+ z);
12            }
13        }

3.2 字符型

字符型数据是平时程序设计中使用比较频繁的类型,其占两个字节。它必须以单引号表示,例如‘A’表示一个字符,这个字符就是A。“A”表示一个字符串,虽然只有一个字符,但因为使用双引号,所以它仍然表示字符串,而不是字符。

总之,字符数据类型只能表示单个字符,任何超过一个字符的内容,都不能被声明为字符型。

字符型和整型都是没有小数点的数据。

3.3 浮点型

3.3.1 单精度浮点型

单精度浮点型占4个字节,有效数字最长为7位,有效数字长度包括了整数部分和小数部分。

float x =223.56.F

在每个单精度浮点型数据后面,都有一个标志性符号“F”或“f”,有这个标志就代表是单精度浮点型数据。

3.3.2 双精度浮点型

双精度浮点型数据占据8个字节,有效数字最长为15位,后面带有标志性符号“D”或“d”。系统默认不带标志性符号的浮点型数据是双精度浮点型数据。(double不是能看出来么?)

3.4 布尔型

布尔型数据是 “是”与“否”。在程序中使用“真”和“假”,即 ture 和 false。

布尔类型的默认值是false。

第4章 变量和常量

4.1变量

在Java程序设计中,每个声明通过的变量必须分配一个类型。声明一个变量时,应该先声明变量的类型,随后再声明变量的名字。

double salary;
int age;
boolean op;

每一行的第一项是变量类型,第二项是变量名。行尾的分号是必需,这是Java语句的结束符号。如果没有这个分号,程序不会认为这是一个完整的Java语句。

int studentnumber,people;

同一类型不同变量在同一行声明,之间要用逗号隔开。

变量的含义:代码“int x”,定义了变量但没有赋值,即申请了内存空间,但没有放入值。如果“int x=5”,说明不但申请了内存空间而且还放入了值,值为5。

4.2 常量

在Java程序设计中,使用关键字“final”来声明一个常量。常量表示在程序开始运行到结束期间都不变的量。

类常量和常量的区别
类常量使用static修饰,但常量没有。

01        //这里的X是一个常量,由于是不在某个方法内的常量,也可以称为成员常量(作者给它取的名字)
02        public class Var2                                                           //定义一个Var2类
03        {
04            final int X=20;                                                         //定义了一个常量X
05            public static void main(String[] args)                                  //主方法
06            {
07                Var2 m=new Var2();                                                  //创建对象m
08                System.out.println(" 打印数据X="+m.X);                              //输出常量X的值
09            }
10        }
01        //这里的X是类常量,所以无论是哪个对象的引用,它的值始终不变
02        public class Var3                                                         //定义一个Var3类
03        {
04            static final int X=20;                                                //定义了一个类常量X
05            public static void main(String[] args)                                //主方法
06            {
07                System.out.println(" 打印数据X="+X);                               //输出类常量X的值
08            }
09        }

从中可以看出,如果是类常量,那么就无需再构建对象,可以直接引用这个常量。如果是一般常量则需要构建对象,通过构建对象来引用这个常量。

第5章 运算符

运算符是在使用变量或常量进行运算时,常需要用到的运算符号,目前总共有10种。

5.1 算术运算符

算术运算符表

a++和++a的区别

两者都有a=a+1的含义

  • a++是a加1先放到内存中,内存的值为a+1,但输出结果为a,a+1还未赋值给a(++在a后面可以理解为先加上1,等下一次运算在使用)。
  • ++a表示让a+1后的值,直接赋值给a。

5.2 关系运算符

关系运算符表

注意:“=”表示赋值,“==”表示等于。

5.3 逻辑运算符

常用的逻辑运算符有3种:“非” “和” “或”。

5.3.1 NOT运算符

NOT运算符是一个否定的意思,在Java中,NOT用符号“!”表示。

01        //非逻辑运算符的应用
02        public class Data10
//定义一个Data10类
03        {
04            public static void main(String[] args)                                     //主方法
05            {
06                int a=10;                                                                        //定义整型变量a并赋值
07                int b=21;                                                                        //定义整型变量b并赋值
08                System.out.println("说a>b,对吗?"+!(a>b));                          //!运算符使用
09            }
10        }

运行结果为ture。

5.3.2 AND运算符

AND是“与”的意思,使用它必须要满足AND前后两个条件。AND运算符在Java中用符号“&&”表示。

原理:两个操作数只要有一个是“false”,结果就是“false”,如果两个操作数都是ture,结果才是ture。

5.3.3 OR运算符

OR是或的意思,两个操作数只要有一个是ture,那么结果就是ture,否则是false。OR运算符在Java中用符号“||”表示。

5.4 位运算符

位运算符主要针对二进制运算,它包括了“与” “非” “或” “异或”。看起来有点像逻辑运算符,但是逻辑运算符是针对两个关系表达式进行逻辑运算,而位运算符针对二进制的位进行运算。

5.4.1 与运算符

与运算符用“&”表示,其使用规律如下:两个操作数中的位都为1的情况下,结果才为1,否则结果为0。

01        public class Data13                                               //定义一个Data13类
02        {
03            public static void main(String[] args)                        //主方法
04            {
05                int a=129;                                                //定义整型变量a并赋值
06                int b=128;                                                //定义整型变量b并赋值
07                System.out.println("a和b与的结果是:"+(a&b));          //&运算符使用
08            }
09        }

129的二进制为10000001,128为10000000,结果为128。

5.4.2 或运算符

或运算符用“|”表示,运算规律如下:两个操作数中,两个位只要有一位为1,结果是1,否则为0。

5.4.3 非运算符

非运算符用“~”表示,其运算规律如下:一个操作数,如果位为0,结果是1;如果位为1,结果是0。

5.4.4 异或运算符

异或运算符是“^”,运算规律是:两个操作数中,相同结果为0,不同为1。

5.5 移位运算符

移位运算符也是针对二进制的“位”。

5.5.1 左移运算符

左移运算符用“<<”表示,是将运算符左边的对象向左移动运算符右边指定的位数,并且在低位补0。其实,向左移n位,就相当于乘上2的n次方。

01        public class Data17                                                   //定义一个Data17类
02        {
03            public static void main(String[] args)                            //主方法
04            {
05            int a=2;                                                          //定义整型变量a并赋值
06            int b=2;                                                          //定义整型变量b并赋值
07            System.out.println("a移位的结果是:"+(a<

结果是00001000,即8。

5.5.2 带符号右移运算符

带符号右移运算符用“>>”表示,是将运算符左边的运算对象向右移动运算符右边指定的位数。如果是正数,在高位补0,如果是负数,则在高位补1。

01        public class Data19                                                                     //定义一个Data19类
02        {
03            public static void main(String[] args)                                              //主方法
04            { 
05                int a=16;                                                                       //定义整型变量a并赋值
06                int c=-16;                                                                      //定义整型变量c并赋值
07                int b=2;                                                                        //定义整型变量b并赋值
08                int d=2;                                                                        //定义整型变量d并赋值
09                System.out.println("a的移位结果:"+(a>>b));                                //>>运算符使用
10                System.out.println("c的移位结果:"+(c>>d));                                //>>运算符使用
11            }
12        }

【代码说明】a的值是16,转换成二进制是00010000,让它右移两位就变成00000100,即4。c的值是-16,转换成二进制是11101111,让它右移一位是11111011,即-4。

5.5.3 无符号右移运算符

无符号右移运算符用“>>>”表示,是将运算符左边的对象向右移动运算符右边制定的位数,并在高位补0。其实右移n位,相当于除上2的n次方。

总结
1.左移运算规则:把数据对象的二进制位依次左移n位,右边空出的位置补0,如20<<2,计算结果为01010000,十进制值为80。

2.无符号右移运算规则:把数据对象的二进制位依次右移n位,左边空出的位置补0,如20>>>2,计算结果为00000101,十进制值为5。

3.带符号右移运算规则:把数据对象的二进制位依次右移n位,移出的数补到左边。如20>>2,计算结果为00000101,十进制为5。这里恰巧和无符号右移运算结果相同。再举例如15>>2,15的二进制位表达为00001111,15>>2的计算结果为11000011,十进制为195;而15>>>2的计算结果为00000011,十进制为3。显然带符号右移与无符号右移有明显区别。

5.6 赋值运算符

赋值是将值赋给变量,而赋值运算符就充当了这个赋值的任务,最简单的赋值运算符就是“=”。

01        public class Data20                                                          //定义一个Data20类
02        {
03            public static void main(String[] args)                                   //主方法
04            {
05                int a=5;                                                             //定义整型变量a并赋值
06                int b=2;                                                             //定义整型变量b并赋值
07                System.out.println("a+=b的值:"+(a+=b));                              //+=运算符使用
08                System.out.println("a-=b的值:"+(a-=b));                              //-=运算符使用
09                System.out.println("a*=b的值:"+(a*=b));                              //*=运算符使用
10                System.out.println("a/=b的值:"+(a/=b));                              ///=运算符使用
11                System.out.println("a%=b的值:"+(a%=b));                              //%=运算符使用
12                System.out.println("a>>=b的值:"+(a>>=b));                //>>=运算符使用
13                System.out.println("a>>>=b的值:"+(a>>>=b));        //>>>=运算符使用
14                System.out.println("a<<=b的值:"+(a<<=b));                //<<=运算符使用
15                System.out.println("a&=b的值:"+(a&=b));                      //&=运算符使用
16                System.out.println("a|=b的值:"+(a|=b));                              //|=运算符使用
17                System.out.println("a^=b的值:"+(a^=b));                              //^=运算符使用
18            }
19        }

【运行效果】
a+=b的值:7
a-=b的值:5
a*=b的值:10
a/=b的值:5
a%=b的值:1
a>>=b的值:0
a>>>=b的值:0
a<<=b的值:0
a&=b的值:0
a|=b的值:2
a^=b的值:0

5.6 三元运算符

用得比较少,它的运算过程是:如果布尔表达式的结果是ture,就返回值0,如果是false,就返回值1。

5.7 逗号运算符

逗号运算符一般用来将几个数值分开。

5.8 转型运算符

转型运算符的用处是将一种类型的对象或数据,经过强制转换而转变为另一种类型的数据。它的格式是在需要转型的数据前加上“()”,然后在括号内加入需要转化的数据类型。

01        public class Data22                                                   //定义一个Data22类
02        {
03            public static void main(String[] args)                            //主方法
04            {
05                int x;                                                        //定义整型变量x
06                double y;                                                     //定义双精度浮点数变量y
07                x=(int)34.56+(int)11.2;                                       //强制转换
08                   y=(double)x+(double)11;                                    //强制转换
09                System.out.println("x="+x);
10                System.out.println("y="+y);
11            }
12        }

【代码说明】第7行中,由于在34.56前有一个int的强制类型转化,所以34.56就变成了34。同样,11.2就变成了11,所以x的结果就是45。第8行中,在x前有一个double类型的强制转换,所以x的值变为45.0,而数值11也被强制转换成double类型,所以也变成11.0,所以最后y的值变为56.0。

5.9 运算符优先级

运算符优先级

你可能感兴趣的:(Java基础学习——数据类型与运算符)