java基础02—变量运算符和数据类型转换

xuliang-daydayup      2022-05-04     599

关键词:

Java语言基础


参考资料:《Java从入门到精通》/明日科技编著. 4版. 北京:清华大学出版社,2016

一、变量与常量

  • 常量:在程序执行过程中,其值不能改变的量称为常量。
  • 变量:在程序执行过程中,其值能被改变的量称为变量。
  • 变量与常量的命名都必须使用合法的标识符

1、标识符与关键字

(1)标识符

  • 标识符可以简单地理解为一个名字,用来给类、变量、方法、文件等进行命名的有效字符序列。
  • Java语言规定标识符只能由字母、数字、美元符号($)、下划线(_)组成,并且第一个字符不能是数字。
  • 标识符不能是Java中保留的关键字。
//合法的标识符
name
user_id
$age

//非法的标识符
5userid
class
user name 

注意:Java语言中的标识符严格区分大小写,如Good和good是不同的标识符。

(2)关键字

  • 关键字是Java语言中已经被赋予特定意义的单词,不能把这些单词作为标识符来使用。
  • 比如public、class、int等都是关键词。

2、声明变量

  • 也叫做定义变量,就是告诉编译器这个变量的数据类型,这样编译器才能分配多少空间给它,以及它能存放什么样的数据。
  • 定义变量时可以赋予初值,也可以不赋予。
int age;     //定义变量,但不赋予初始值
char c1 = ‘a‘;

变量的命名不是随意的,应该遵循如下准则:

  • 变量名必须是一个有效的标识符;
  • 变量名不可以使用Java语言的关键字;
  • 变量名不可以重复;
  • 应该选择有意义的单词作为变量名。

3、声明常量

在声明一个常量时,除了要指定数据类型外,还需要final关键词进行限定。

final double PI = 3.1415926D;   //声明常量
final boolean results = true;
  • 常量通常使用大写字母表示,但这并不是强制要求。
  • 常量在整个程序中只能被赋予一次。
  • 当定义的final变量属于“全局变量”时,必须在定义时就赋予它初始值,否则会产生编译错误。
public class Part {
    static final double PI = 3.14D;   //必须定义初始值
    static int age ;
    
    public static void main(String[] args) {
        final int number;
        number = 12345;
        age = 12;
        //number = 2345;     //错误代码,常量只能被赋予一次
        System.out.println(PI);
        System.out.println(number);
        System.out.println(age);

    }
}

3、 变量的有效范围

由于变量被定义出来后只是暂存于内存中,等程序执行到某一个点,该变量会被释放掉,也就是说变量有它的生命周期。因此,变量的有效范围是指程序代码能够访问的区域,若超出该区域,则在编译时就会出错。在程序中,一般根据变量的有效范围,将变量分为“成员变量”和“局部变量”。

(1)成员变量

  • 在类体中定义的变量称为成员变量,成员变量在整个类中都有效。
  • 类的成员变量又可分为两种,即静态变量实例变量。注意:前提是成员变量
class var{
    int x = 45;    //实例变量
    static int y = 34;   //静态变量
}
  • 静态变量的有效范围可以跨类,甚至可以达到整个应用程序之内。
  • 对于静态变量,除了能在定义它的类中存取,还可以直接以“类名.静态变量”的方式在其他类中使用。

(2)局部变量

  • 在类的方法中定义的变量称为局部变量。局部变量只在当前代码块中有效。
  • 局部变量可与成员变量同名,此时成员变量被隐藏,即这个成员变量在此方法中暂时失效。
public class Val {
    static int times = 3;    //成员变量
    public static void main(String[] args) {
        int times =123;     //局部变量
        System.out.println(times);    //输出123
    }
}

二、运算符

运算符是一些特殊的符号,主要用于数学函数、一些类型的赋值运算和逻辑比较等方面。

1、赋值运算符

赋值运算符以等号“=”表示,是程序开发中最常见的操作,它是一个二元运算符(对两个操作数作处理),其功能是将右方的数值赋予个左方。例如:

int a = 10;    //赋值操作

赋值运算会先取得右方表达式处理的结果,因此,一个表示式中若含有两个及以上的“=”运算符,会从最右的“=”开始处理。

int a = b = c =15;

2、算数运算符

  • Java中的算数运算符主要有+(加)、-(减)、*(乘)、/(除)、%(求余),它们都是二元运算符。
  • 其中,“+”和“-”运算符还可以作为数据的正负号,如+5、-7。
public class Arith {
    public static void main(String[] args) {
        int num1 = 12;
        float num2 = 2.4f;
        double num3 = 2.4;
        System.out.println(num1 + num2);   //加
        System.out.println(num1 - num2);   //减
        System.out.println(num1 * num2);   //乘
        System.out.println(num1 / num2);   //除
    }
}

3、自增和自减运算符

  • 自增和自减是单目运算符,可以放在操作元之前,也可以放在操作元之后。
  • 操作元必须是一个整型或浮点型变量。
  • 放在前面的自增或自减,会先将变量的值加1或减1,然后再使变量参与表达式的运算。
  • 放在后面的自增或自减,会使变量参与表达式的运算,然后再将变量加1或减1。
int a = 5;
b = ++a   //先将变量a的值加1,然后赋予b,此时a=6,b=6
b = a++   //先将变量a的值赋给b,然后a的值加1,此时a=6,b=5

4、比较运算符

  • 比较运算符属于二元运算符,用于程序中的变量之间、变量和自变量之间以及其他类型的信息之间的比较。
  • 比较运算符的运算结果是boolean型。当运算对应的关系成立时,运算结果为true,否则结果为false。

比较运算符总有6个,如下所示:

运算符 作用
> 是否大于
< 是否小于
== 是否等于
>= 是否大于等于
<= 是否小于等于
!= 是否不等于
public class Compare {
    public static void main(String[] args) {
        int num1 = 4;
        int num2 = 5;
        System.out.println(num1 > num2);   //输出false
        System.out.println(num1 < num2);   //输出true
        System.out.println(num1 == num2);  //输出false
        System.out.println(num1 != num2);  //输出true
    }
}

5、逻辑运算符

  • 逻辑运算符包括&&/&(逻辑与)、||(逻辑或)、!(逻辑非)。
  • 逻辑操作符的操作对象必须是boolean型数据。
运算符 含义 用法 结合方向
&&、& 逻辑与 a && b 从左到右
|| 逻辑或 a || b 从左到右
! 逻辑非 !a 从右到左

逻辑与符号“&&”与“&”之间的区别:

表达式1  &  表达式2     //会判断两个表达式的boolean值
表达式1  &&  表达式2    //当表达式1的boolean值为false,则直接输出结果
public class Calculation {
    public static void main(String[] args) {
        int a = 2;
        int b = 5;
        boolean result1 = (a > b) && (a != b);
        boolean result2 = (a > b) || (a != b);
        System.out.println(result1);    //输出为false
        System.out.println(result2);    //输出为true
    }
}

6、位运算

整型数据在内存中以二进制的形式表示,如int型变量7的二进制表示为00000000 00000000 00000000 00000111(32位)。左边最高位是符号位,0表示正数,1表示负数。在内存中,负数采用补码的形式表示,如-8的二进制表示为11111111 11111111 11111111 11111000(32位)。

(1)按位与运算

  • 按位与运算符为“&”,为双目运算。
  • 运算规则:对应位都为1,结果为1,否则为0。
  • 如果两个操作数的精度不同,则结果的精度与精度高的操作数相同。
int result3 = 5 & -4;   
System.out.println(result3);    //输出为4

(2)按位或运算

  • 按位或的运算符为“|”,为双目运算。
  • 运算规则:对应位都是0,结果才为0,否则为1。
  • 如果两个操作数的精度不同,则结果的精度与精度高的操作数相同。
int result4 = 3 | 6;
System.out.println(result4);   //输出为7

(3)按位取反运算

  • 按位取反运算也称按位非运算,运算符为“~”,为单目运算。
  • 运算规则:就是将0改成1,1改成0。
int result5 = ~7;
System.out.println(result5);   //输出为-8

(4)按位异或运算

  • 运算符为“^”,双目运算。
  • 运算规则:同时为1或0时,结果为0,否则为1。
  • 如果两个操作数的精度不同,则结果的精度与精度高的操作数相同。
int result6 = 10 ^ 3;
System.out.println(result6);    //输出为9

(5)移位操作

移位符有三种:

  • << :左移
  • >> :右移
  • >>> : 无符号右移
  1. 左移就是将运算符左边的操作数的二进制数据按照指定的位数向左移动,右边移空的部分补0。
  2. 右移复杂一些,如果高位是0,右移空的位置就填入0;如果高位是1,右移空的位置就填入1。
  3. 无符号右移是指,无论高位是0还是1,被移空的高位都填入0。
        int x, y;
        int n = 2;
        x = n << 1;    //左移1位
        y = n << 2;    //左移2位
        System.out.println(x);    //输出为4
        System.out.println(y);    //输出为8

注意:移位操作符适合的数据类型有byte、int、short、long和char。

技巧:移位操作可以实现整数乘以2或除以2的效果,向左移一位就是乘以2,左移两位就是乘以4。

(6)三元运算符

  • 三元运算符的使用格式为:条件式? 值1 : 值2
  • 运算规则为:若条件表达式的值为true,则整个表达式取值1,否则取值2。
boolean b1 = 4 < 5? true : false;
int b2 = 4 < 5? 12 : 34;
char b3 = 4 < 5? ‘q‘ : ‘w‘;
System.out.println(b1);     //输出为true
System.out.println(b2);     //输出为12
System.out.println(b3);     //输出为q

(7)运算优先级

运算符的优先级决定了表达式中运算执行的先后顺序,通常优先级由高到底的顺序依次是:

  • 增量和减量运算(++a或--a)
  • 算数运算(*、/、+、-)
  • 比较运算(>、<、>=、<=)
  • 逻辑运算(&&、||)
  • 赋值运算(=)

二、数据类型转换

类型转换是将一个值从一种类型变更为另一种类型的过程。

  • 从低精度数据类型向高精度数据类型转换,则永远不会溢出,并且总是成功的;
  • 把高精度数据类型向低精度数据类型转换,则必然会有信息丢失,有可能失败;
  • 数据类型的转换有两种方式,即隐式转换显示转换

1、隐式类型转换

隐式类型转换是指从低级类型到高级类型的转换,系统将自动进行,程序员无须进行任何操作。

  • 数据类型按精度从低到高的顺序排列:byte < short < int < long < float < double。
int x = 50;
float y = x;    //int型隐式转换为float型
System.out.println(y);   //输出为50.0
public class Conver {
    public static void main(String[] args) {
        byte mybyte = 12;
        int myint = 150;
        float myfloat = 234.34f;
        char mychar = 33;
        double mydouble = 21.2331234;
        System.out.println(mybyte + myfloat);  //转换为float型
        System.out.println(mybyte + myint);    //转换为int型
        System.out.println(mybyte + mychar);    //转换为int型
        System.out.println(mybyte + mydouble);   //转换为double型
    }
}

注意:Java中涉及到Byte,char和short类型的运算时,都会把这些类型提升为int类型,然后对int类型数值进行运算,最后得到int类型的结果。因此。两个byte型的运算最终得到int型。

2、显示类型转换

当把高精度的变量的值赋给低精度的变量时,必须使用显示类型转换运算,又称强制类型转换

  • 语法:(要转换的类型名)要转换的变量。
int a = (int)43.23;
System.out.println(a);   //输出为43

long b = (long)424.2313F;
System.out.println(b);   //输出为424

int c = (int)‘c‘;
System.out.println(c);   //输出为99
  • 当执行显示转换时,可能会导致精度损失。
  • 除了boolean类型,其他类型都能以显示转换的方式达到。

说明:当把一个整数赋值给byte、short、int、long型变量时,不可以超过这些变量的取值范围,否则必须进行强制类型转换。

byte b = (byte)129;
System.out.println(b);  //输出为-127

三、代码注释与编码规范

在代码中适当地添加注释可以提高程序的可读性和可维护性,好的编码规范可以时程序更加容易理解。

1、代码注释

Java语言提供了三种添加注释的方法,分别是单行注释、多行注释和文档注释。

(1)单行注释

“//”为单行注释的符号,从“//”开始到换行为止的所有内容均作为注释信息。

int age =12;   //定义一个age变量

(2)多行注释

“/**/”为多行注释的符号,符号“/*”和“*/”之间的所有内容均为注释信息,注释信息可以换行。

/*
注释信息1
注释信息2   
注释信息3
*/
  • 在多行注释可以嵌套单行注释。
  • 在多行注释里不可以嵌套多行注释。

(3)文档注释

“/** */”为文档注释的符号,符号“/**”与“*/”之间的内为文档注释内容。当文档注释出现在声明之前时,如类的声明、成员变量的声明、成员方法的声明等,会被javadoc文档工具读取作为javadoc文档的内容。

java基础语法数据类型和运算符(代码片段)

...则12.常量13.理解数值提升14.int和String之间的相互转换二、运算符三、注释四、关键字五、总结一、变量和类型在介绍下面各种类型之前我们先总的浏览一下有哪些类型(图中类型ÿ 查看详情

java基础语法

TableofContents1.变量与运算符1.1关键字和保留字1.1.1关键字(keyword)的定义和特点:1.1.2保留字(reservedword):1.2标识符1.2.2定义合法标识符规则:1.2.3Java中的名称命名规范:1.3变量1.3.1基本数据类型1.3.2基本数据类型变量间的转换1.3.3基本数据... 查看详情

java学习-----01.java基础

...型;  数据类型的使用;  标识符的命名规则;赋值运算符:算术运算符:  运算符优先级;  三目运算符;类型转换:  自动类型转换;  类型提升规则;  强制类型转换;标识符关键字boolean类型关系运算符... 查看详情

java基础知识—变量数据类型和运算符

1.变量:存储数据的一个基本单元。2.变量的声明和赋值: 1)声明并赋值;数据类型变量名=值例如:intprince=10; 2)声明、赋值分为两步:数据类型变量名;例如:int=price; 变量名=值例如:price=103.数据类型分为两种: 1)基本数据... 查看详情

韩顺平循序渐进学java零基础

...String转基本类型细节本章作业1本章作业2本章小结第04章运算符算术运算符介绍算术运算符使用算术运算符练习1算术运算符练习2算术运算符练习3算术运算符练习4关系运算符介绍关系运算符使用逻辑运算符介绍短路与逻辑与短路... 查看详情

java基础-基本数据类型扩展及类型转换

1.关于变量和常量:变量要经过赋值才能使用,不赋值,使用将会报错   2.计算并赋值运算符   3.数据类型转换隐式类型转换   floatfloatVal=11.32f;doubledoubleVal=1234567890.123456;floatVal=(float)doubleVal;System.ou 查看详情

java基础02数据类型运算符分支结构

内容:  (1)数据类型  (2)运算符  (3)分支结构 1.数据类型  java语言中的基本数据类型:byte、short、int、long、float、double、boolean、char。 1.1布尔类型  在java语言中描述真假信息的类型有:boolean。  该类型变... 查看详情

java-语言基础(代码片段)

...声明常量4、变量的有效范围1、成员变量2、局部变量三、运算符1、赋值运算符2、算术运算符3、自增和自减运算符4、比较运算符5、逻辑运算符6、位运算符1.“按位与”运算(都是1为1)2.“按位或”运算(都是0为0... 查看详情

java的基础内容02

类型转换由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。低----------------------------------------------------->高byte,short,char-->int-->long-->float-->double(小数优先级高于整数)运算中,不同类型的数据先... 查看详情

java基础知识复习(代码片段)

...型转换强制类型转换隐式类型转换小结6.变量命名规范7.运算符算数运算符逻辑运算符移位运算符关系运算符8.switch9.方法方法的重载可变参数变程方法的调用10.数组一维数组的创建方式一维数组在内存中的存储数组的拷贝一维数... 查看详情

02_java基础_第2天(变量运算符)_讲义

今日内容介绍1、变量2、运算符01变量概述*A:什么是变量?*a:变量是一个内存中的小盒子(小容器),容器是什么?生活中也有很多容器,*例如水杯是容器,用来装载水;你家里的大衣柜是容器,用来装载衣裤;饭盒是容器,*用... 查看详情

javase系列java基础(代码片段)

...据类型转换4.3常用ASCII编码表(美国标准信息交换码)五、运算符5.1算数运算符(Java中,整数使用这些算数运算符,无论怎么计算,也不会得 查看详情

javase基础回顾

...存储单元中存放的值变量的声明格式:类型变量名;2、运算符运算符种类&nbs 查看详情

java基础

JAVA基础目录JAVA基础一基本语法注释标识符关键字运算符常量选择结构循环结构二变量变量的数据类型变量的类型转换变量和常量的区别三面向对象类与对象作用域——访问控制构造方法与垃圾回收thisstatic关键字继承抽象类接口... 查看详情

java程序猿之数据运算和运算符

  Java是一门强类型语言,强类型语言包含两方面的含义:1、所有变量必须先声明、后使用;2、指定类型的变量只能接受类型与之匹配的值。  基本类型大致分为两种:数值类型和布尔类型,其中数值类型包括:整形、字符... 查看详情

初识java-变量,数据类型和运算符.2

一,数据类型1,基础数据类型  整型:   byte (8bit)  short  (16bit)  int  (32bit)  long  (64bit)  浮点型:  float  (32bit)  double  (64bit)  字符型:  char& 查看详情

java的基本语法变量和运算符

...nbsp;1.6变量使用的注意事项 1.7数据类型转换 第2章运算符2.1算术运算符 2.2算数运算符++、--的使用 2.3赋值运算符 2.4比较运算符2.5逻 查看详情

java基础再回首————数据类型和运算符

本文主要记录一下重新学习Java基础中学到的之前遗漏的细节。1.java属于强类型语言2.8种基本的数据类型:byte,short,int,long,float,double,char,boolean,当作自动类型数据转换时:  byte,char,short--->int--->long--->float--->double,需要... 查看详情