Java教程

Java数据类型和运算符

本文主要是介绍Java数据类型和运算符,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

数据类型和运算符

标识符和关键字

分隔符

Java语言里的“;”,"{}","[]","()"," ","."都具有特殊的分割作用,被称为分隔符

对语句进行分割。

  • Java的语句可以跨行写,以;作为语句结尾,但是不能将变量名、字符串等跨行

{}

定义代码块。代码块在逻辑上是一个整体。

[]

主要作用是对数组元素进行访问,方括号通常紧跟数组变量名

()

  • 定义方法时使用其包含所有的形参声明
  • 调用方法时传入实参值
  • 优先计算表达式的部分
  • 强制类型转换

空格

分隔一条语句的不同部分

.

圆点通常用作类/对象和它的成员(属性、方法、内部类)之间的分隔符,表明调用某个类或某个实例的指定成员。

标识符规则

Java的标识符必须以字母、下划线、美元符号开头,后面可以跟任意数目的字母、数字、下划线和美元符。此处不局限于英文字母,还可以中文、日文等。

注意:

  1. 标识符可以有字母、下划线、美元符组成,数字不能作开头
  2. 标识符不能是Java的关键字和保留字,但可以包含关键字和保留字
  3. 标识符不能包含空格
  4. 标识符只能包含美元符号,不能用@、#等其它符号

关键字

Java所有关键字都是小写的,共有48个关键字

java关键字

  • 空引用(null)只能被转换成引用类型,不能转换成基本类型,因此不要把一个null值赋给基本数据类型的变量

基本数据类型

Java数据类型分类

Java的基本数据类型可以分为两大类:boolean类型和数值类型。

  • boolean
    • 1位:boolean
  • 数值类型
    1. 整类型
      1. 1个字节:byte
      2. 2个字节:short
      3. 4个字节:int
      4. 8个字节:long
    2. 字符类型
      • 2个字节:char
    3. 浮点类型
      1. 4个字节:float
      2. 8个字节:double

整型

整形通常包括下述类型:

  • byte:一个byte型整数在内存里占8位,表述范围是:$$-128(-2)7到127(27-1)$$。
  • short:一个short型整数在内存中占16位,表示的范围是:$$-32768(-215)到32767(2{15}-1)$$。
  • int:占32位,表示范围是:$$-2147483648(-2{31})到2147483647(2{31}-1)$$。
  • long:占64位,表示范围为$$-2{63}到2{63}-1$$

特别情况

一个Java整数常量默认就是int类型。但是存在下述两种情况:

  • 如果直接将一个较小的整数常量(在byte或short类型的表数范围内)赋给一个byte或short变量,系统会自动把这个整数常量当成byte或short类型来进行处理
  • 如果使用一个巨大的整数常量(超出int类型的表数范围)时,Java不会自动把这个整数常量当成long类型来处理。
    • 如果系统把一个整数常量当成long来处理,应该在这个整数常量后增加l或L作为后缀。
  • 把较小的整数常量赋值给一个long类型的变量,这并不因为Java会将其当作long类型进行处理,Java依然会把这个整数常量当成int类型来继续处理,只是这个int类型的值会自动转换到long

字符型

字符型通常表示单个字符,字符常量必须使用单引号括起来。

字符类型的3中表示形式:

  1. 直接通过单个字符来指定字符常量('A')
  2. 通过转义字符表示特殊的字符常量
  3. 直接使用Unicode值来表示字符常量‘\uxxxx’

转义字符

浮点型

  • Java的浮点类型有两种:float,double。

  • Java的浮点类型的字段长度和表数范围和机器无关

  • Java采用二进制数据的科学计数法来表示浮点数,对于float型数值,第一位是符号位,接下来8位是指数为,接下来2位是尾数;对于double型数值,第一位是符号位,接下来是11位表示指数,接下来的52位表示尾数。

  • 一个double类型的数值占8个字节,64位

  • 一个float类型的数值占4个字节,32位

Java语言的浮点数有两种表示形式

  • 十进制形式:浮点数必须包含一个小数点,否则会被当作int型进行处理
  • 科学计数法形式:如5.12e2(即$$5*10^2$$)

注意:只有浮点类型的数值才能使用科学计数法表示。

Java的浮点型默认是Double类型

如果想让一个浮点型当作float处理,该将这浮点型值后紧跟f或F

Java提供的特殊的浮点数值:

  1. 正无穷大
  2. 负无穷大
  3. 非数

用于表示溢出或出错。

  • NaN不与任何数值相等($$NaN\ne NaN$$)
  • 只有浮点数除以0才可以得到正无穷大或负无穷大、
public class TestFloat 
{
    public static void main(String[] args)
    {
        float af = 5.234556f;
        // 下面将看到af的值发生改变
        System.out.println(af);
        double a = 0.0;
        double c =Double.NEGATIVE_INFINITY;
        float d = Float.NEGATIVE_INFINITY;
        //可以看到float和double的负无穷大是相等的
        System.out.println(c == d);
        //0.0除以0.0将出现非数
        System.out.println(a / a);
        //两个非数之间是不相等的
        System.out.println(a / a == Float.NaN);
        //所有的正无穷大都是相等的
        System.out.println(6.0 / 0 == 555.0 / 0);
        //附属除以0.0 得到负无穷打
        System.out.println(-8 / a);
    }
}
==============================================
    ❯ cd "f:\Java\chapter3\" ; if ($?) { javac TestFloat.java } ; if ($?) 
{ java TestFloat }
5.234556
true
NaN
false
true
-Infinity

布尔型

布尔型对应只有一个boolean类型,用于表示逻辑上的真或假。

布尔型的取值

  • false
  • true

注意

其它基本类型不能转换成boolean类型

Java语言中使用boolean型的变量获值控制的流程

  • if条件控制
  • while循环控制语句
  • do循环控制语句
  • for循环控制语句
  • 还可以在三目运算符(:?)中使用

基本类型的类型转换

Java中不同基本类型的值可以在不同类型之间转换,Java提供的7个数值型之间可以相互转换,有两种转换方式:自动类型转换、强制类型转换

自动类型转换

如果系统支持把某个基本类型的值直接赋值给另一种基本类型的变量,则这种方式称为自动类型转换。

自动类型转换规则

  • 当把一个表数范围小的数值会变量直接赋值给另一个表数范围大的变量时,系统可以进行自动类型转换。

  • 满足上述情况下,Java的所有数值型变量之间可以进行类型转换。

  • 当把任何基本类型和字符串进行连接运算时,基本类型的值将自动类型转换位字符串类型。(字符串类型不再时基本类型,是引用类型)

    • 如果系统把基本类型的值转换为对应的字符串,可以把基本类型的值和一个空字符串进行连接。
    public class AutoConversion {
        public static void main (String[] args){
            int a = 6;
            //int可以自动转换为float类型
            float f = a;
            //下面价格你会输出6.0
            System.out.println(f);
            //定义一个byte类型的整数变量
            byte b = 9;
            //如果将其赋值给char类型,会出现错误,因为byte类型不能自动转换为char
            double d = b;
            //下面将输出9.0
            System.out.println(d);
        }
    }
    ❯ cd "f:\Java\chapter3\" ; if ($?) { javac AutoConversion.java } ; if 
    ($?) { java AutoConversion }
    6.0
    9.0
    

    强制类型转换

    强制类型转换语法

    (targetType)value

    • 强制类型转换的运算符是圆括号(())。当进行强制类型转换时,如果表数范围大转成表数范围小的会造成数据溢出,这种被称为“缩小转换
    public class NarrowConversion {
        public static void main(String[] args){
            int iValue = 232;
            //强制把一个int类型的值转换为byte类型的值
            byte bValue = (byte)iValue;
            //将输出-23
            System.out.println(bValue);
            double  dValue = 3.98 ;
            //强制把一个double转换为int
            int tol = (int)dValue;
            //将输出3
            System.out.println(tol);
        }
    }
    ================================
        javac NarrowConversion.java } ; if ($?) { java NarrowConversion }
    -24
    3
    

关于溢出

所有的数字在计算机底层都是以二进制进行存储,计算机以补码的形式存储所有整数。然后就是看如何截断位数,就可以砍断溢出后输出的数是什么

表达式类型的自动提升

当一个算数表达式中包含多个基本类型的值时,整个算数表达式的数据了剋行将会发生自动提升。

自动提升规则

  • 所有的byte类型、short和char类型会被提升为int
  • 整个算数表达式的数据类型自动提升到与表达式中最高等级擦欧总数同样的类型。

数值类型

  • 如果希望把基本类型转换为对应字符串,可以把基本类型将一个空字符串进行连接

  • public class PrimitiveAndString {
        public static void main(String[] args){
            //下面代码是错误的,不能将整形直接赋值给字符串
            //String str1 = 5;
            //一个基本类型值和字符串进行连接运算时,基本类型值自动转换为字符串
            String str2 = 3.5f + "";
            //下面将输出3.5
            System.out.println(str2);
            //下面语句将输出Hello!34
            System.out.println("Hello!"+3+4);
        }
    }
    ===================
        ❯ cd "f:\Java\chapter3\" ; if ($?) { javac PrimitiveAndString.java } ; if ($?) { java PrimitiveAndString }
    3.5
    Hello!34
    

直接量

能够指定直接量的通常只有三种类型:基本类型、字符串类型和null类型

Java所支持的8种类型的直接量

  1. int类型:在程序中直接给出的整型数值(10进制、8进制(0开头)、16进制(0x或0X开头)三种)
  2. long类型:在整数数值后添加l或L就变成了long类型的直接量(例如3L,0x12L)
  3. float类型:在一个浮点数后添加f或F就是float的直接量(可以是小数形式,也可以是科学计数法)
  4. double类型:直接给出一个标准小数形式或科学计数法形式
  5. boolean类型:true和false
  6. char类型:char类型有3种形式:
    1. 单引号括起的字符
    2. 转义字符
    3. Unicode值表示的字符
  7. String类型:双引号括起来的字符序列
  8. null类型:null
  • null类型就是一种特殊类型,这个直接量可以赋值给任意引用类型的变量:用来表示这个引用类型变量中保存的地址为空,为存在有效的对象

运算符

运算符是一种特殊的符号,用以表示数据的运算、赋值、比较等。

  • Java使用运算符将一个或多个操作连缀成执行性语句,以实现特定的功能

运算符种类

  • 算数运算符
  • 赋值运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符
  • 类型相关运算符

算数运算符

加、减、乘、除和求余。

+

加法运算符,字符串拼接

-

*

/

  • 如果左右两个运算数是整形,则计算结果为整数——截断取整
    • 19/4 结果为4不是五
  • 大于一个浮点数,则是自然出发

%

求余运算符,求余运算的结果不一定总是整数,它的计算结果使用第一个运算数除以第二个运算数,得到一个整除结果后身下的值就是余数。

  • 如果两个运算数都是整数类型,则求余运算的第二个运算数不能是0,否则会引发除以零异常
  • 如果有大于等于1个浮点数,则允许第二个操作数为0或0.0,只是求余结果是非数:NaN

++

自加运算符,单目运算符,可以出现在操作数的左右两边:

  • 出现左边,先加后用
  • 出现右边,先用后加

--

自减运算符

如果需要完成乘方,开放运算

借助java.lang.Math类的工具方法完成复杂的数学运算

public class TestMath {
    public static void main(String[] args){
        //定义常量a为3.2
        double a = 3.2;
        //求a的5次方,并加过你计算结果赋值b
        double b = Math.pow(a, 5);
        //print b 
        System.out.println(b);
        //Find the square root of A
        double c = Math.sqrt(a);
        //print c
        System.out.println(c);
        //cal random number and return a number between 0 and 1
        double d = Math.random();
        //print d 
        System.out.println(d);
        // cal sin(1.57)
        double e = Math.sin(1.57);
        //print e
        System.out.println(e);
    }
}
===========================
      cd "f:\Java\chapter3\" ; if ($?) { javac TestMath.java } ; if ($?) { java TestMath }
335.5443200000001
1.7888543819998317
0.8853359248243061
0.9999996829318346

赋值运算符

赋值运算符用于为变量指定变量值。

  • Java也是用=作为赋值运算符

赋值方式

  • 直接将常量赋值给变量
  • 将一个变量赋值给另一个变量
  • 赋值运算符还可以将表达式的值赋给变量

位运算符

Java支持的位运算符有下述7个:

  • &:按位与
  • |:按位或
  • ~:按位非
  • ^:按位异或
  • <<:左移运算符
  • >>:右移位运算符
  • >>>:无符号右移运算符

位运算符的运算结果表

位运算运算表

移位运算符注意点

对于>>、>>>、<<三个移位运算符只能对byte、short、char、int、long等整数类型进行运算

特殊规则:

  1. 对于低于int类型(byte、short、char)的操作数总是先自动类型转换位int类型后再移位。
  2. 对于int类型的整数移位a>>b,当b>32,系统先用b对32求余,得到的结果才是真正移位的尾数
  3. 对于long型的整数移位时a>>b,当b>64,总是先用b对64求余,得到的结果才是真正的位移的位数

⭐拓展后的赋值运算符

  • +=
  • -=
  • *=
  • /=
  • %=
  • &=
  • |=
  • ^=
  • <<=
  • >>=
  • >>>=

比较运算符

比较运算符用于判断两个变量或常量的大小,比较运算的结果时一个布尔值

Java支持的比较运算符

  • >:大于
  • >=:大于等于
  • <:小于
  • <=:小于等于
  • ==:等于
  • !=:不等于

逻辑运算符

逻辑运算符用于操作两个布尔类型的变量或常量

  • &&:与
  • &:不短路与
  • ||:或
  • |:不短路或
  • !:非
  • ^:异或

三目运算符

三目运算符只有:?:

语法如下:

(expression) ? if-true-statement:if-false-statement

⭐运算符的结合型与优先级

image-20210828200131520

编码建议

  • 不要把一个表达式写的过于复杂,如果过于复杂应该分开几步完成
  • 不要过多依赖运算符优先级来控制表达式的执行顺序,这样可读性差,建议使用()
这篇关于Java数据类型和运算符的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!