包装类和Java运算符

一、包装类(Wrapper Class)

  1. Java是面向对象语言,但是Java中的基本数据类型却是不面向对象的,但在实际使用中,经常需要将基本数据转化成对象,便于操作,为了使基本类型具备对象的特性,Java提供了包装类,就可以像操作对象一样操作基本类型数据。
  • 包装类均位于java.lang包,使用时系统会自动导入。
  • 基本类型和包装类的对应关系:
基本数据类型 包装类 基本数据类型 包装类
byte Byte float Float
int Integer double Double
short Short boolean Boolean
long Long char Character
  1. 包装类的作用
  • 提供字符串、基本数据类型、对象之间相互转化的方式。
  • 包含每种基本数据类型的相关属性,如最大值、最小值。
  1. 自动装箱:基本类型自动的封装到与它相同类型的包装中,此过程调用valueOf方法。
    例如:
Integer i = 100;

本质上是编译器编译时自动添加了

Integer i = new Integer(100);
  1. 自动拆箱:包装类对象自动转换成对应的基本类型,调用intvalue方法。
int a = new Integer(100);

本质上是编译器编译时自动添加了

int a = new Integer (100).intValue();
  1. 缓存问题:当通过自动装箱机制创建包装类对象时,首先会判断数值是否在[-128,127]的范围内,如果满足条件,则当作基本数据类型来处理,从缓存中寻找指定数值,若找到缓存,则不会创建新的对象,只是指向指定数值对应的包装类对象,否则将创建一个新的对象,会返回在堆中分配的内存地址。
    实例:
        Integer a1 = 1234;
        Integer a2 = 1234;
        System.out.println(a1 == a2);
        System.out.println(a1.equals(a2));

        Integer a3 = 123;
        Integer a4 = 123;
        System.out.println(a3 == a4);
        System.out.println(a3.equals(a4));

运行结果:
包装类和Java运算符_第1张图片

二、变量和常量

Java变量是程序中最基本的存储单元,其要素包括变量名变量类型作用域
变量在使用前必须对其声明,只有在变量声明以后,才能为其分配相应长度的存储单元,每个变量都有类型,可以是基本类型,也可以是引用类型,常用的引用类型有:类、接口和数组。

  • 实例变量:也称成员变量,是在方法外部、类的内部定义的变量,如果不进行初始化,会自动初始化成该类型的默认初始值,保存在堆中,随着对象的创建而存在,随着对象的消失而消失。
  • 静态变量:又称类变量,用static修饰,可以由类名或对象调用,存储在方法区中,静态变量的生存周期为整个源程序,,但只能在定义改变量的函数内使用该变量。
  • 局部变量:方法或语句块内部定义的变量,只在这个范围内有效,在使用前必须声明和初始化,保存在虚拟机栈中,系统根据变量大小自动分配存储空间,作用的范围结束时变量的空间自动释放。
  • 常量:在编译的时候统一进行处理,变量名大写,只能被初始化一次。

三、运算符

优先级 运算符 简介 结合性
1 [ ]、. 、( ) 方法调用,属性获取 从左到右
2 ! 、~、++、- - 一元运算符 从右向左
3 *、/、% 乘、除、取余 从左向右
4 +、- 加、减 从左向右
5 <<、>>、>>> 左移、右移、无符号右移 从左向右
6 <、<=、>、>=、instanceof 小于、小于等于、大于、大于等于、对象类型判断是否是同类型 从左向右
7 ==、!= 两个值是否相等,两个值是否不相等 从左向右
8 & 按位与 从左向右
9 ^ 按位异或 从左向右
10 l 按位或 从左向右
11 && 短路与 从左向右
12 ll 短路或 从左向右
13 条件运算符 从右向左
14 =、+=、-=、*=、/=、%=、l=、^=、<、<=、>、>=、>>= 混合赋值运算符 从右向左
  • 算术运算符:+、 - 、* 、 / 、%(取余)、 ++(自增)、 - -(自减)

例:

        int a = 3;
        int b = a++;    //执行完毕后,b=3,先给b赋值,再自增
        int c = ++a;    //执行完毕后,c=5,先自增,再给c赋值
        System.out.println("a = "+a);
        System.out.println("b = "+b);
        System.out.println("c = "+c);

	System.out.println(-5 % 2);
        System.out.println(-5 % 2);
        System.out.println(5 % -2);
        System.out.println(5 % 2);

运行结果:
包装类和Java运算符_第2张图片
“+”还可用于字符串的连接,运算符两侧的操作数中只要有一个是String类型,系统会自动将另一个操作数转换为字符串然后进行连接。

  • 赋值运算符:=
  • 关系运算符:< (小于)、<=(小于等于)、>(大于)、>=(大于等于)、== (等于)、!=(不等于)
  • 位运算符:&(按位与),|(按位或),^(按位异或),~,<<(左移),>>(右移),>>>(无符号右移)
    说明:a << x=a2^x
    b >> y=b
    2^(-y)
    例:
	int a = 4;
        int b = 7;
        System.out.println(a & b);
        System.out.println(a | b);
        System.out.println(a ^ b);
        System.out.println(~a);
        
        int c1 = a * 2 * 2;
        int c2 = a << 2;
        int d1 = a / 2 / 2;
        int d2 = a >> 2;
        System.out.println("c1 = "+c1);
        System.out.println("c2 = "+c2);
        System.out.println("d1 = "+d1);
        System.out.println("d2 = "+d2);

运算结果:
包装类和Java运算符_第3张图片

  • 逻辑运算符:&&(逻辑与)、||(逻辑或)、!(逻辑非)
    说明:逻辑与和逻辑或采用短路的方式,从左到右计算,如果确定值则不会再进行下去。
    例:
        boolean a = 1 > 2 && 2 > (3/0);
        boolean b = 1 < 2 && 2 > (3/0);
        System.out.println("a = "+a);	//执行结果为false,未抛异常说明 2>(3/0)未被执行
        System.out.println("b = "+b);	//1<2结果为ture,执行2>(3/0)时报错
  • 扩展赋值运算符: +=,-=, *=,/=
运算符 用法举例 等效表达式
+= a += b a = a + b
-= a -= b a = a - b
*= a *= b a = a * b
/= a /= b a = a / b
%= a %= b a = a % b
  • 条件运算符:?、:

    • 三元条件运算符:常用来代替简单的if-else判断
      • 语法格式:x ? y : z

说明:x为boolean类型表达式,先计算x的值,若为ture,则此三元运算的结果为表达式y的值,否则整个运算结果为表达式z的值。

你可能感兴趣的:(Java基础语法)