Java中的数据类型

Java 基本数据类型

声明变量就是申请内存来存储值,也就是说,当创建变量的时候,需要在内存中申请空间

变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式

内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据所以我们可以通过定义不同类型的变量,在内存中储存整数、小数或者字符Java 语言中的数据类型可以分为以下两大类

  1. 基本数据类型
  2. 引用数据类型

基本数据类型

Java 语言提供了八种基本类型:六种数字类型 ( 四个整数型,两个浮点型 ),一种字符类型,一种布尔型

  1. byte:

    • byte 数据类型是 8 位、有符号的,以二进制补码表示的整数
    • 最小值是 -128 ( -2^7 )
    • 最大值是 127 ( 2^7-1 )
    • 默认值是 0
    • byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一

    例如

    byte a = 100;
    byte b = -50;
    
  2. short:

    • short 数据类型是 16 位、有符号的以二进制补码表示的整数
    • 最小值是 -32768 ( -2^15 )
    • 最大值是 32767 ( 2^15 - 1 )
    • short 数据类型也可以像 byte 那样节省空间,一个 short 变量是 int 型变量所占空间的二分之一
    • 默认值是 0

    例如

    short s = 1000;
    short r = -20000;
    
  3. int

    • int 数据类型是 32 位、有符号的以二进制补码表示的整数
    • 最小值是 -2,147,483,648 ( -2^31 )
    • 最大值是 2,147,483,647 ( 2^31 - 1 )
    • 一般地整型变量默认为 int 类型
    • 默认值是 0

    例如

    int a = 100000;
    int b = -200000;
    
  4. long

    • long 数据类型是 64 位、有符号的以二进制补码表示的整数
    • 最小值是 -9,223,372,036,854,775,808 ( -2^63 )
    • 最大值是 9,223,372,036,854,775,807 ( 2^63 -1 )
    • long 类型主要使用在需要比较大整数的系统上
    • 默认值是 0L

    例如

    long a = 100000L;
    Long b = -200000L;
    

    “L” 理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩,所以最好大写

  5. float

    • float 数据类型是单精度、32 位、符合 IEEE 754 标准的浮点数
    • float 在储存大型浮点数组的时候可节省内存空间
    • 默认值是 0.0f
    • 浮点数不能用来表示精确的值,如货币

    例如

    float f1 = 234.5f;
    
  6. double

    • double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数
    • 浮点数的默认类型为 double 类型
    • double 类型同样不能表示精确的值,如货币
    • 默认值是 0.0d

    例如

    double d1 = 123.4;
    
  7. boolean

    • boolean 数据类型表示一位的信息
    • 只有两个取值:true 和 false
    • 这种类型只作为一种标志来记录 true/false 情况
    • 默认值是 false

    例如

        boolean one = true;
    
  8. char

    • char 类型是一个单一的 16 位 Unicode 字符
    • 最小值是 \u0000 ( 即为0 )
    • 最大值是 \uffff ( 即为 65,535 )
    • char 数据类型可以储存任何字符

引用类型

1.Java 中,引用类型指向一个对象,指向对象的变量是引用变量

这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等

变量一旦声明后,类型就不能被改变了
  1. 对象、数组都是引用数据类型
  2. 所有引用类型的默认值都是 null
  3. 一个引用变量可以用来引用与任何与之兼容的类型

Java 常量

常量在程序运行时,不会被修改的量

Java 中使用 final 关键字来修饰常量,声明方式和变量类似

final double PI = 3.1415927;

虽然常量名也可以用小写,但为了便于识别,通常使用大写字母表示常量

字面量可以赋给任何内置类型的变量

byte a = 68;
char a = 'A'

byte、int、long、和 short 都可以用十进制、16 进制以及 8 进制的方式来表示

当使用常量的时候,前缀 0 表示 8 进制,而前缀 0x 代表 16 进制

int decimal = 100;
int octal = 0144;
int hexa =  0x64;

Java 的字符串常量也是包含在两个引号之间的字符序列

下面是一些字符串型字面量的示例

"Hello World"
"two\nlines"
"\"This is in quotes\""

字符串常量和字符常量都可以包含任何 Unicode 字符

char a = '\u0001';
String a = "\u0001";

Java 语言支持一些特殊的转义字符序列

符号字符含义
\n换行 (0x0a)
\r回车 (0x0d)
\f换页符(0x0c)
\b退格 (0x08)
\0空字符 (0x20)
\s字符串
\t制表符
"双引号
单引号
\反斜杠
\ddd八进制字符 (ddd)
\uxxxx16进制Unicode字符 (xxxx)

Java 运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号

Java 语言内置了丰富的运算符

Java 支持以下几类运算符

  1. 算术运算符
  2. 关系运算符
  3. 位运算符
  4. 逻辑运算符
  5. 赋值运算符
  6. 其他运算符

算术运算符

算术运算符用在数学表达式中,它们的作用和在数学中的作用一样

下表下表列出了 Java 语言中所有的算术运算符

我们假定整数变量 A 的值为 10,变量 B 的值为20

操作符描述示例
+加法 - 相加运算符两侧的值A + B 等于 30
-减法 - 左操作数减去右操作数A – B 等于 -10
*乘法 - 相乘操作符两侧的值A * B 等于 200
/除法 - 左操作数除以右操作数B / A 等于 2
%取模 - 左操作数除以右操作数的余数B%A 等于 0
++自增: 操作数的值增加1B++ 或 ++B 等于 21
自减: 操作数的值减少1B-- 或 --B 等于 19

下面的代码简单的演示了这些运算符的使用

public class MathOperator {

  public static void main(String[] args) {
     int a = 10;
     int b = 20;
     int c = 25;
     int d = 25;
     System.out.println("a + b = " + (a + b) );
     System.out.println("a - b = " + (a - b) );
     System.out.println("a * b = " + (a * b) );
     System.out.println("b / a = " + (b / a) );
     System.out.println("b % a = " + (b % a) );
     System.out.println("c % a = " + (c % a) );
     System.out.println("a++   = " +  (a++) );
     System.out.println("a--   = " +  (a--) );
     // 查看  d++ 与 ++d 的不同
     System.out.println("d++   = " +  (d++) );
     System.out.println("++d   = " +  (++d) );
  }
}

运行范例 »

编译运行以上 Java 代码,输出结果如下

a + b = 30
a - b = -10
a * b = 200
b / a = 2
b % a = 0
c % a = 5
a++   = 10
a--   = 11
d++   = 25
++d   = 27

自增自减运算符

自增 ( ++ ) 自减 ( – ) 运算符

这两个运算符是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算,而自增自减运算符是一个操作数

public class selfAddMinus{
    public static void main(String[] args){
        int a = 3;//定义一个变量;
        int b = ++a;//自增运算
        int c = 3;
        int d = --c;//自减运算
        System.out.println("进行自增运算后的值等于"+b);
        System.out.println("进行自减运算后的值等于"+d);
    }
}

编译运行以上 Java 代码,输出结果如下

进行自增运算后的值等于4
进行自减运算后的值等于2

在这个范例中

  1. int b = ++a; 拆分运算过程为: a=a+1=4; b=a=4, 最后结果为b=4,a=4
  2. int d = --c; 拆分运算过程为: c=c-1=2; d=c=2, 最后结果为d=2,c=2
  3. 缀自增自减法 (++a,–a)😗* 先进行自增或者自减运算,再进行表达式运算
  4. 后缀自增自减法 (a++,a–)😗* 先进行表达式运算,再进行自增或者自减运算
范例
public class selfAddMinus{
    public static void main(String[] args){
        int a = 5;//定义一个变量;
        int b = 5;
        int x = 2*++a;
        int y = 2*b++;
        System.out.println("自增运算符前缀运算后a="+a+",x="+x);
        System.out.println("自增运算符后缀运算后b="+b+",y="+y);
    }
}

编译运行以上 Java 代码,输出结果如下

自增运算符前缀运算后 a=6,x=12
自增运算符后缀运算后 b=6,y=10

关系运算符

下表列出了 Java 支持的关系元素符

我们假定整数变量 A 的值为 10,变量 B 的值为 20

运算符描述示例
==检查两个操作数的值是否相等,相等则条件为真( A == B) 为假 (非真)
!=检查两个操作数的值是否相等,值不相等则条件为真( A != B) 为真
>检查左操作数的值是否大于右操作数的值,如果是那么条件为真( A > B ) 非真
<检查左操作数的值是否小于右操作数的值,如果是那么条件为真( A < B ) 为真
>=检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真( A >= B ) 为假
<=检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真( A <= B ) 为真

下面的代码简单的演示了这些关系运算符的使用

public class Test {

  public static void main(String[] args) {
     int a = 10;
     int b = 20;
     System.out.println("a == b = " + (a == b) );
     System.out.println("a != b = " + (a != b) );
     System.out.println("a > b = " + (a > b) );
     System.out.println("a < b = " + (a < b) );
     System.out.println("b >= a = " + (b >= a) );
     System.out.println("b <= a = " + (b <= a) );
  }
}

编译运行以上 Java 代码,输出结果如下

a == b = false
a != b = true
a > b = false
a < b = true
b >= a = true
b <= a = false

位运算符

Java 语言支持位运算符

位运算符可以应用于整数类型 (int),长整型 (long),短整型 (short),字符型 (char),和字节型 (byte) 等类型

位运算符作用在所有的位上,并且按位运算

我们假设 a = 60,b = 13,那么它们的二级制和位运算结果如下

A     = 0011 1100
B     = 0000 1101
-----------------
A & b = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A    = 1100 0011

下表列出了 Java 支持的 位运算符

我们假设整数变量 A 的值为 60 和变量 B 的值为 13

操作符描述示例
如果相对应位都是1,则结果为1,否则为 0( A & B ) 得到 12,即 0000 1100
|如果相对应位都是0,则结果为 0,否则为 1( A | B ) 得到 61,即 0011 1101
^如果相对应位值相同,则结果为0,否则为 1(A ^ B)得到49,即 0011 0001
按位补运算符翻转操作数的每一位 即 0 变成 1,1 变成 0( ~A ) 得到 -61,即1100 0011
<<按位左移运算符 左操作数按位左移右操作数指定的位数A << 2 得到 240,即 1111 0000
>>按位右移运算符 左操作数按位右移右操作数指定的位数A >> 2 得到 15 即 1111
>>>按位右移补零操作符 左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充A>>>2 得到 15 即 0000 1111

下面的范例简单的演示了这些位操作符的使用

public class Test {
  public static void main(String[] args) {
     int a = 60; /* 60 = 0011 1100 */ 
     int b = 13; /* 13 = 0000 1101 */
     int c = 0;
     c = a & b;       /* 12 = 0000 1100 */
     System.out.println("a & b = " + c );

     c = a | b;       /* 61 = 0011 1101 */
     System.out.println("a | b = " + c );

     c = a ^ b;       /* 49 = 0011 0001 */
     System.out.println("a ^ b = " + c );

     c = ~a;          /*-61 = 1100 0011 */
     System.out.println("~a = " + c );

     c = a << 2;     /* 240 = 1111 0000 */
     System.out.println("a << 2 = " + c );

     c = a >> 2;     /* 15 = 1111 */
     System.out.println("a >> 2  = " + c );
  
     c = a >>> 2;     /* 15 = 0000 1111 */
     System.out.println("a >>> 2 = " + c );
  }
} 

编译运行以上 Java 代码,输出结果如下

a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 15
a >>> 15

逻辑运算符

下表列出了 Java 支持的逻辑运算符的基本运算

假设布尔变量 A 为真,变量 B 为假

操作符描述示例
&&称为逻辑与运算符 当且仅当两个操作数都为真,条件才为真( A && B ) 为假
||称为逻辑或操作符 如果任何两个操作数任何一个为真,条件为真( A | |B ) 为真
!称为逻辑非运算符。用来反转操作数的逻辑状态 如果条件为 true,则逻辑非运算符将得到 false!(A && B) 为真

下面的范例演示了这些逻辑运算符的使用

public class Test {
  public static void main(String[] args) {
     boolean a = true;
     boolean b = false;
     System.out.println("a && b = " + (a&&b));
     System.out.println("a || b = " + (a||b) );
     System.out.println("!(a && b) = " + !(a && b));
  }
}

编译运行以上 Java 代码,输出结果如下

a && b = false
a || b = true
!(a && b) = true

短路逻辑运算符

当使用 与逻辑运算符 ( && ) 时,在两个操作数都为 true 时,结果才为 true

但是当得到第一个操作为 false 时,其结果就必定是 false,这时候就不会再判断第二个操作了

public class LuoJi{
    public static void main(String[] args){
        int a = 5;//定义一个变量;
        boolean b = (a<4)&&(a++<10);
        System.out.println("使用短路逻辑运算符的结果为"+b);
        System.out.println("a的结果为"+a);
    }
}

编译运行以上 Java 范例,输出结果如下

使用短路逻辑运算符的结果为 false
a的结果为5

在这段代码中,使用到了短路逻辑运算符( && ),首先判断 a<4 的结果为 false,则 b 的结果必定是 false,所以不再执行第二个操作 a++<10 的判断,所以 a 的值为 5

赋值运算符

下表列出了 Java 语言支持的赋值运算符

操作符描述示例
=简单的赋值运算符,将右操作数的值赋给左侧操作数C = A + B将把A + B得到的值赋给C
+=加和赋值操作符,将左操作数和右操作数相加赋值给左操作数C += A 等价于 C = C + A
-=减和赋值操作符,将左操作数和右操作数相减赋值给左操作数C -= A 等价于 C = C -A
*=乘和赋值操作符,将左操作数和右操作数相乘赋值给左操作数C *= A 等价于 C = C * A
/=除和赋值操作符,将左操作数和右操作数相除赋值给左操作数C /= A 等价于 C = C / A
%=取模和赋值操作符,将左操作数和右操作数取模后赋值给左操作数C %= A 等价于 C = C%A
<<=左移位赋值运算符C <<= 2等价于 C = C << 2
>>=右移位赋值运算符C >>= 2等价于 C = C >> 2
&=按位与赋值运算符C &= 2 等价于 C = C&2
^=按位异或赋值操作符C ^= 2等价于 C = C ^ 2
|=按位或赋值操作符C |= 2 等价于C = C | 2

下面的范例演示了这些运算符的使用

public class Test {
  public static void main(String[] args) {
     int a = 10;
     int b = 20;
     int c = 0;
     c = a + b;
     System.out.println("c = a + b = " + c );
     c += a ;
     System.out.println("c += a  = " + c );
     c -= a ;
     System.out.println("c -= a = " + c );
     c *= a ;
     System.out.println("c *= a = " + c );
     a = 10;
     c = 15;
     c /= a ;
     System.out.println("c /= a = " + c );
     a = 10;
     c = 15;
     c %= a ;
     System.out.println("c %= a  = " + c );
     c <<= 2 ;
     System.out.println("c <<= 2 = " + c );
     c >>= 2 ;
     System.out.println("c >>= 2 = " + c );
     c >>= 2 ;
     System.out.println("c >>= a = " + c );
     c &= a ;
     System.out.println("c &= 2  = " + c );
     c ^= a ;
     System.out.println("c ^= a   = " + c );
     c |= a ;
     System.out.println("c |= a   = " + c );
  }
} 

编译运行以上 Java 代码,输出结果如下

c = a + b = 30
c += a  = 40
c -= a = 30
c *= a = 300
c /= a = 1
c %= a  = 5
c <<= 2 = 20
c >>= 2 = 5
c >>= 2 = 1
c &= a  = 0
c ^= a   = 10
c |= a   = 10

条件运算符 ( ?: )

条件运算符 ( ?: ) 也被称为三元运算符

该运算符有 3 个操作数,并且需要判断布尔表达式的值

条件运算符 ( ?: ) 的主要是决定哪个值应该赋值给变量

variable x = (expression) ? value if true : value if false

范例

public class Test {
   public static void main(String[] args){
      int a , b;
      a = 10;
      // 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
      b = (a == 1) ? 20 : 30;
      System.out.println( "Value of b is : " +  b );

      // 如果 a 等于 10 成立,则设置 b 为 20,否则为 30
      b = (a == 10) ? 20 : 30;
      System.out.println( "Value of b is : " + b );
   }
}

编译运行以上 Java 代码,输出结果如下

Value of b is : 30
Value of b is : 20

instanceof 运算符

instanceof运算符用于检查某个对象是否是一个特定类型 ( 类类型或接口类型 )

语法

instanceof 运算符使用语法如下

( Object reference variable ) instanceof  (class/interface type)

如果运算符左侧变量所指的对象,是操作符右侧类或接口 ( class / interface )的一个对象,那么结果为真

String name = "James";

// 由于 name 是 String 类型,所以返回真
boolean result = name instanceof String; 

如果被比较的对象兼容于右侧类型,该运算符仍然返回 true

class Vehicle {}

public class Car extends Vehicle {
   public static void main(String[] args){
      Vehicle a = new Car();
      boolean result =  a instanceof Car;
      System.out.println( result);
   }
}

编译运行以上 Java 代码,输出结果如下

true

Java 运算符优先级

当多个运算符出现在一个表达式中,谁先谁后呢 ?

这就涉及到运算符的优先级别的问题

在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大

下面这个如果按加号最优先计算,答案就是 18,如果按照乘号最优先,答案则是 14

1 + 3 + 3 + 2 * 2

再如 x = 7 + 3 * 2 这里 x 得到 13,而不是 20,因为乘法运算符比加法运算符有较高的优先级,所以先计算 3 * 2 得到 6,然后再加 7

下表列出了 Java 语言中运算符的优先级

具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部

类别操作符关联性
后缀() [] .( 点操作符 )左到右
一元+ + - ! ~从右到左
乘性* / %左到右
加性+ -左到右
移位>> >>> <<左到右
关系>> = << =左到右
相等== !=左到右
按位与左到右
按位异或^左到右
按位或|左到右
逻辑与&&左到右
逻辑或| |左到右
条件?:从右到左
赋值= += -= *= /= %= >>= <<= &= ^= |=从右到左
逗号左到右

Java 条件判断

判断语句要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)

Java 语言把任何 非零非空 的值假定为 true ,把 null 假定为 false

下面是大多数编程语言中典型的判断结构的一般形式

Java 中的判断语句

判断语句

Java 语言提供下列 5 种类型的判断语句

语句描述
if 语句一个 if 语句由一个布尔表达式后跟一个或多个语句组成
if…else 语句一个 if 语句后可跟一个可选的 else 语句 else 语句在布尔表达式为假时执行
if…else if 语句f 语句后面可以跟 else if…else 语句,可以检测到多种可能的情况
嵌套 if 语句您可以在一个if或else if语句内使用另一个if或else if语句
switch 语句一个switch语句允许测试一个变量等于多个值时的情况

? : 运算符(三元运算符)

我们在之前的 JAVA 运算符条件运算符 中其实已经提到了 ? : 三元运算符。

条件运算符 ? : 独特的语法,其实可以用来替代 if…else 语句

? : 语法格式如下

Exp1 ? Exp2 : Exp3;

Exp1Exp2Exp3 是都是表达式。

注意: 冒号(😃 的使用和位置

?: 表达式的值是由 Exp1 决定的。

  • 如果 Exp1 为真,则计算 Exp2 的值,结果即为整个 ? 表达式的值
  • 如果 Exp1 为假,则计算 Exp3 的值,结果即为整个 ? 表达式的值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值