【JAVA语言-第2话】常量、变量、数据类型、运算符

Java语言基础

1.1 常量

1.1.1 概述

        常量可以简单理解为,在程序运行期间,固定不变的量;例如圆周率的值PI = 3.14。

1.1.2 常量的分类

  • 字符串常量:凡是用双引号引起来的部分,叫做字符串常量,例如:“abc”、“Hello”;
  • 整数常量:只有整数部分的数字,没有小数点,例如:100、0、-250;
  • 浮点数常量:含有小数点的数字,例如:2.5、-3.14、0.0;
  • 字符常量:凡是用单引号引起来的单个字符,叫做字符常量,例如:‘A’、‘9’、‘中’;
  • 布尔常量:只能取值规定的两个值,例如:false、true;
  • 空常量:null,代表没有任何数据。

1.2 变量

1.2.1 概述

        变量和常量恰恰相反,指在程序运行期间,内容可以发生改变的量。

1.2.2 定义变量的格式    

方式一

数据类型 变量名称; //定义变量

变量名称 = 数据值; //赋值,将右边的数据值,赋值交给左边的变量

public class TestBasic {
    public static void main(String[] args) {
        int i;//定义了一个整型的变量,但是没有赋值
        i = 3;//将3赋值给变量i
    }
}

方式二

数据类型 变量名称 = 数据值;//定义变量的同时进行赋值

public class TestBasic {
    public static void main(String[] args) {
        int i = 3;//定义了一个整型的变量,将3赋值给变量i
    }
}

1.2.3 变量的注意事项

  • 没有进行赋值的变量,不能直接使用,一定要先赋值,后使用
  • 如果创建多个变量,那么在相同作用域内变量之间的名称不可以重复,重复会编译报错;
  • 对于float和long类型来说,字母后缀F和L最好不要丢掉,而且最好使用大写;
  • 如果使用byte或者short类型的变量,那么右侧的数据值不能超过左侧类型的范围;
  • 变量使用不能超过作用域的范围,作用域:从定义变量的一行开始,一直到直接所属的大括号结束为止
  • 可以通过一个语句来创建多个变量,用逗号隔开,但一般情况下不推荐这么写,一个分号‘;’代表一个语句的结束;
  • 对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含的进行强制转换,例如byte num = 30,左侧变量是一个byte类型,但是右侧是一个int类型,但是因为数值没有超过byte的范围,故而系统会自动补上一个byte,如下byte num = (byte)30,因为是int转byte,从大转小,不属于自动转换,而是隐含的强制转换;
  • 在给变量赋值的时候,如果右侧的表达式当中全是常量,没有变量,那么编译器javac就会直接将若干个常量表达式计算得到结果,编译之后,.class字节码文件就直接保存了结果,这种称为“编译器的常量优化”,但是一旦有变量参与,就不能进行这种优化了。

1.3 数据类型

1.3.1 数据类型的分类

1.基本数据类型

分类数据类型所占长度默认值取值范围
整数型byte1字节0-128(-2^7) ~ 127(2^7 - 1)
short2字节0-32768(-2^15) ~ 32767(2^15 - 1)
int4字节0-2147483648(-2^31) ~ 2147483647(2^31 - 1)
long8字节0-9223372036854775808(-2^63) ~ 9223372036854775807(2^63 -1)
浮点型float4字节0.0-3.4E38(-3.410^38)~ 3.4E38(3.410^38)
double8字节0.0-1.7E308(-1.710^308)~ 1.7E308(1.710^308)
字符型char2字节'\u0000'0 ~ 65536(2^32)
布尔型boolean1字节falsefalse,true

2.引用数据类型:除基本类型以外的所有类型。

1.3.2 注意事项

  • 字符串不是基本类型、而是引用类型;
  • 浮点型可能只是一个近似值,并非精确的值;
  • 浮点数默认类型是double,如果一定要使用float类型,需要加上一个后缀F;
  • 整数默认是int类型,如果一定要使用long类型,需要加上一个后缀L,推荐使用大写字母后缀;
  • 数据范围与字节数不一定相关,例如float数据范围比long更加广泛,但是float是4个字节,而long是8个字节。

1.4 数据类型的转换

1.4.1 概述

        当数据类型不一样时,但又需要将一个类型的数据转换成另外一个类型,将会发生数据类型的转换。

1.4.2 数据类型的分类

1.自动类型转换(隐式)

        特点:代码不需要进行特殊处理,自动完成。

        格式:数据范围从小到大,与字节数不一定相关。

public class TestBasic {
    public static void main(String[] args) {
        int i;
        float num = 20;//左边是float类型,右边是int类型,不一致进行自动转换,故而num = 20.0
    }
}

2.强制类型转换(显式)

        特点:代码需要进行特殊的格式处理,不能自动完成。

        格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据

public class TestBasic {
    public static void main(String[] args) {
        /**
         * int num = 100L;,左边是int类型,右边是long类型,不一致,
         * 但是long到int不是从小到大,不能发生自动转换,这是就需要强制转换,
         * int num = (int)100L;
         */
//        int num = 100L; //会编译报错
        int num2 = (int)100L; //正确的强制转换
    }
}

1.4.3 ASCLL码

ASCLL码表

        American Standard Code for Information Interchange,美国信息交换标准代码,范围0-128,感兴趣的可以自行查略 -》百度百科-验证;不用刻意背,记住几个关键的:‘0’是48、‘A’是65,‘a’是97,小写字母和大写字母之间相差32。

Unicode码表

        万国码,也是数字和符号的对照关系,比ASCLL范围更大。

1.4.4 注意事项

  • byte、short、char这三种类型在运算的时候,都会被首先提升为int类型,然后在计算,所以当两个byte类型进行计算时,应该用int类型的变量进行接收,但是如果结果在数值范围内没有超过short或者byte,可以进行强制类型转换成byte或者short类型,这样可以节省内存空间也不会造成逻辑错误,但是如果数值范围超过了则会发生数据溢出。
  • boolean类型不能发生数据类型转换;
  • 强制类型转换一般不推荐使用,因为有可能发生精度损失,数据溢出;
  •         如: Long->int 发生数据溢出,float->int 会舍弃所有的小数位,所以会发生精度损失。

1.5 运算符

1.5.1 概述

        运算符:进行特定操作的符号,例如:‘+’。

        表达式:用运算符连起来的式子叫做表达式,例如‘20+1’。

1.5.2 算数运算符

+(加)、-(减)、*(乘)、/(除)、%(取余)、++(自增)、--(自减)

1.“+”有三种常用的用法 

  • 对于数值来说,那就是简单的加法运算;
  • 对于字符char来说,在计算之前,char会提升成int类型,也就是转换成对应的ASCLL码;
  • 对于字符串String来说,加号代表字符串的连接操作,任何数据类型和字符串进行运算,结果都会变成字符串类型。
public class TestBasic {
    public static void main(String[] args) {
        int a = 1,b = 2;
        char c1 = 'a',c2 = 'b';
        String str1 = "Hello ",str2 = "Java!";
        System.out.println("对于整型:" + (a + b)); //输出:对于整型:3
        System.out.println("对于字符型:" + (c1 + c2)); //输出:对于字符型:195
        System.out.println("对于字符串型:" + (str1 + str2)); //输出:对于字符串型:Hello Java!
    }
}

2.自增自减

  • 自增运算符(++):让一个变量的值+1,例如++num或者num++;
  • 自减运算符(--):让一个变量的值-1,例如--num或者num--。
public class TestBasic {
    public static void main(String[] args) {
        int i = 1;
        //单独使用
        System.out.println(i++);//输出:1,++在后,先使用后加一:此时i=i+1=2
        System.out.println(++i);//输出:3,++在前,先加一在使用:此时i=i+1=3
        System.out.println(i--);//输出:3,--在后,先使用在减一:此时i=i-1=2
        System.out.println(--i);//输出:1,--在前,先减一再使用:此时i=i-1=1

        //混合使用
        int sum = 0,j = 10;
        sum = (j++) + (++j) - (--j) + (j--);//10+12-11+11,Java中的运算是从左往右进行的
        System.out.println("sum = " + sum);//输出:sum = 22
    }
}

3.注意事项

  • 只有变量才可以使用自增自减运算符,常量不可以使用。 

1.5.3 赋值运算符

1.赋值运算符的分类

基本赋值运算符:就是一个等号“=”,代表将右侧的数据交给左侧的变量。

复合运算符:“+=”、“-=”、“*=”、“/=”、“%=”。

2.注意事项

  •  只有变量才可以使用赋值运算符,常量不能写在赋值运算符的左侧;
  • 复合赋值运算符其中隐含一个强制类型转换。

1.5.4 比较运算符

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

1.注意事项

  •  比较运算符的结果一定是一个boolean值,成立就是true,不成立就是false;
  • 如果进行多次判断,不能连着写,例如“1<x<3”,应该写成“x > 1 && x < 3”。

1.5.5 逻辑运算符

逻辑与 “&&” 和“&”:双目运算符,两边全都是true,才是true,否则为false。

逻辑或“||” 和 “|”:双目运算符,只要有一个true,就全是true,如果全都是false,才是false。

逻辑非“!”:单目运算符,本来是true,变成false,本来是false,变成true。

1.逻辑于和逻辑或的短效果 

  •  如果根据左边已经可以判断得到的最终结果,那么右边的代码将不再执行,从而节省一定的性能;因此,在工作中,比较推荐使用短路与和短路或。
public class TestBasic {
    public static void main(String[] args) {
        int i = 1,j = 3;
        int a = 5,b = 6;
        /**
         * 短路与&& 和 逻辑与& 的区别
         * &&:当表达式1为假时,整个表达式的结果已经为假了,就不会再执行表达式2
         * &:当表达式1为假时,整个表达式的结果已经为假了,仍然会执行表达式2
         */
        if(i-- < 0 && j++ < 10);
        System.out.println(i);//输出:0,执行了i--操作
        System.out.println(j);//输出:3,没有执行j++操作

        /**
         * 短路或|| 和 逻辑或| 的区别
         * ||:当表达式1为真时,整个表达式的结果已经为真了,就不会再执行表达式2
         * |:当表达式1为真时,整个表达式的结果已经为真了,仍然会再执行表达式2
         */
        if(a++ > 0 || b++ < 10);
        System.out.println(a);//输出:6,a++执行了
        System.out.println(b);//输出:6,b++没有执行
    }
}

2.注意事项

  •  逻辑运算符只能用于boolean值;
  • 与、或需要左右各自有一个boolean值,但是取反只要有唯一的一个boolean值即可;
  • 与、或两种运算符,如果有多个条件,可以连续写。

1.5.6 三元运算符

1.概述

  • 一元运算符:只需要一个数据就可以进行操作的运算符;
  • 二元运算符:需要两个数据才可以进行操作的运算符;
  • 三元运算符:需要三个数据才可以进行操作的运算符。

2.格式

数据类型 变量名称 = 条件判断:表达式A:表达式B

3.流程

        首先判断条件是否成立,如果成立为true,那么将表达式A的值赋值给左侧的变量,如果不成立则为false,就将表达式B的值赋值给左侧的变量,二者选其一。

public class TestBasic {
    public static void main(String[] args) {
        int i = 10;
        boolean b = i > 13 ? true : false;//判断:如果i > 13时,b = true,否则,b = false
        System.out.println(b);//输出:false
    }
}

4.注意事项

  •  必须同时保证表达式A和表达式B都符合左侧数据类型的要求;
  • 三元运算符的结果必须被使用。

 

题外话:

        如果文章中存在错误的地方,欢迎大家指正出来,共同学习进步,后续会陆续就JAVA这门课程展开进行分享。 

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值