Java数据类型与运算符

  • Post author:
  • Post category:java



目录


一、变量和类型


二、基本数据类型


1. 整型变量( int )☆☆☆☆☆


2.长整型变量(long)


3.双精度浮点型变量(double)


4.单精度浮点型变量(float)


5.字符类型变量(char)


6.字节类型变量(byte)


7.短整型变量(short)


8. 布尔类型变量(boolean)


三、字符串数据类型


1. 字符串拼接


2. 转义字符


四、变量的作用域


1.变量基本要领


2.变量的命名规则


五、常量


1.字面值常量


2.final修饰的常量 ->常量


六、类型转换


1. int 和 long/double 互相赋值


2. int 和boolean 相互赋值


3.int 字面值常量给 byte 赋值


七、数值提升


1.int 和 long混合运算


2. byte 和 byte 的运算


3.int 和 String 之间的相互转换


八、运算符


1.算术运算符


2.关系运算符


3.逻辑运算符


4.位运算符


5.移位运算


6.条件运算符


7.运算符的优先级


一、变量和类型

变量: 程勋运行时可变的量 , 相当于开辟内存来存储数据

类型: 对变量种类进行划分, 不同类型的变量具有不同的特性

1 pb = 1024 tb = 1024 gb = 1024 mb = 1024 kb = 1024 byte = 8 bit

在Java中任何数值类型都是有取值范围的

Java中用 Unicode表示字符. 每个 Unicode占用 2 个字节, 每个字节是 8 bit位

包装类指的是,基本数据类型对应的类类型。因为基本数据类型无法进行对象化处理, 所以引入了包装类( 8中基本数据 byte, short, int, long, float, double, char,boolean, 除了int 对应的是Integer, char 对应的是Character, 其余都是首字母大写即可).

二、基本数据类型

1. 整型变量( int )☆☆☆☆☆

  1. int 是 4个字节: 充分说明: 可移植性强( 一次编译,到处运行: 跨平台性)
  2. java中的 int , 没有所谓的无符号类型, 统一都是有符号的
  3. 取值范围:-2147483648 ~ 214743647 ==> -2^31 ~ 2^31-1
  • int的最大取值: System.out.println(Integer.MAX_VALUE ) ( Integer[ 包装类]: int的plus版本 )
  • int的最小取值System.out.println(Integer.MIN_VALUE )
  1. 变量的命名: 小驼峰(第一个首字母小写,其他大写 [maxNum, max_num, max$num, max3_num ]) -> 数字 字母 下划线 美元符号 组成 ( 不能以数字开头 )
  2. 变量在使用前必须得初始化!!!! 如果不初始化就使用,编译器会报错

2.长整型变量(long)

  1. long 是 8 个字节 long a = 10L (定义long类型时,L最好是大写)
  2. 取值范围: -2^63 ~ 2^63 -1
  • long的最大取值: System.out.println(Long.MAX_VALUE )
  • long的最小取值System.out.println(Long.MIN_VALUE )
  1. Java中不存在 long long类型

3.双精度浮点型变量(double)

  1. double 是 8个字节
  2. 小数本身是没有一个精确地数字的, 只能精确到小数点后几位 float ->6

4.单精度浮点型变量(float)

  1. float 是 4 字节 float f = 12.5f (后面加 f 或 F 表明它是单精度浮点类型 )

5.字符类型变量(char)

  1. char 是 2 个字节 char ch = ‘特’ (C 中 char是一个字节)
  2. Java中使用 单引号( ‘ ‘ ) + 单个字母 的形式表示字符字面值
  3. 计算机中字符本质上是一个整数. C语言中使用 ASCII 表示字符, 而Java中用 Unicode表示字符. 因此,一个字符占用两个字节, 表示的字符种类更多, 包括中文

6.字节类型变量(byte)

  1. byte 是 1 个字节 byte b = 10 (数据类型不一样, 字节大小不一样)
  2. 取值范围: -128 ~ 127

7.短整型变量(short)

  1. short 是 2 个字节 short s = 10
  2. 取值范围: -32768 ~ 32767

8. 布尔类型变量(boolean)

  1. boolean 取值 为true 和 false, 不能有其他的值
  2. Java中 boolean 类型 和 int 不能相互转换,不存在 1 表示 true, 0 表示 false这样的用法
  3. boolean 类型有些jvm 的实现是占1 字节, 有些事占1 个比特位,没有明确规定

三、字符串数据类型

单引号 ‘a’ -> 字符

双引号 “若干字符 ” -> 字符串

1. 字符串拼接

public class TestDemo {
    public static void main(String[] args) {
        String str = "hello";
        System.out.println(str);

        //注意问题
        System.out.println("hello" + "world"); //拼接
        System.out.println("hello" + 10 + 20); //其它数据类型和字符串使用 + 拼接, 结果就是一个字符串
        System.out.println("hello" + (10 + 20)); //hello30
        // 计算机从左往右开始计算,先计算10 +20 得到整数30, 在进行字符串拼接
        System.out.println(10 + 20 + "hello"); //30hello
        System.out.println(10 + "" + 20 + "hello");  //1020hello

        //a = 10, b = 20
        System.out.println("a = " + 10 + ", b = " + 20);
    }
}

2. 转义字符

字符串中的一些特定的不太方便直接表示的字符需要进行转义

\n : 回车 \t : 制表符

public class TestDemo {
    public static void main(String[] args) {
        String s1 = "\"bit\""; // "bit"
        String s2 = "\\bit\\";// \bit\
        String s3 = "\\\\bit\\\\";  //  \\bit\\
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
    }
}

四、变量的作用域

1.变量基本要领

①变量分为成员变量和局部变量;; 成员变量又分为普通成员变量( 定义在类的内部, 方法的外部 )和静态成员变量   [ Java中没有全局变量的概念  ]

②变量找作用域时, 找变量最近的花括号 {}

  • 程序运行的时候可以改变的量;
  • 在程序运行的时候再能知道里面的值是多少

2.变量的命名规则

①硬性指标

  • 一个变量名只能包含字母, 数字, 下划线和美元符号($ 不建议);
  • 数字不能开头;
  • 有大小写区分

②软心指标

  • 变量名具有描述性(见名知意);
  • 变量名不宜使用拼音(不绝对);
  • 变量名词性推荐名词;
  • 命名推荐小驼峰命名法(当一个变量名有多个单词构成时,除了第一个单词之外,其余单词首字母都大写)

五、常量

  • 在程序运行的过程中不可以修改;
  • 在程序编译时,就已经确定其值是什么了(只能初始化一次)

1.字面值常量

  • 10         //int  字面值常量(十进制);
  • 010       //int  字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8 ;
  • 0x10     //int  字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十六进制的 16 ;
  • 10L       //long  字面值常量, 也可以写作 10l (小写的L);
  • 1.0        //double  字面值常量, 也可以写作 1.0d 或者 1.0D ;
  • 1.5e2    //double  字面值常量, 科学计数法表示, 相当于 1.5 * 10^2 ;
  • 1.0f       //float  字面值常量, 也可以写作 1.0F ;
  • true       //boolen  字面值常量, 同样的还有false ;
  • ‘ a ‘        //char  字面值常量, 单引号中只能有一个字符;
  • ” abc ”   //String  字面值常量, 双引号中可以有多个字符.

2.final修饰的常量 ->常量

常量不能在程序中发生修改

public class TestDemo {
    public static void main(String[] args) {
        int a = 10;
        System.out.println(a);  //10

        final int SIZE = 20;
        //a = 20;      //编译出错,提示 无法为最终变量a 分配值
        System.out.println(SIZE);  //20 
    }
​​​​​​​}

六、类型转换

1. int 和 long/double 互相赋值

public class TestDemo {
    public static void main(String[] args) {
        int a = 10;
        long b = a;  //正确

        long l = 12;
        //int c = l;  //报错
        int c = (int)l;  //只能强制类型转换: 有风险

        int d = 10;
        double e = 1.0;
        //d = e;    //编译出错
        e = d;    //正确
    }
}
  • long 表示的范围更大, 可以将 int 赋值给 long, 但是不能将 long 赋值给 int.
  • double 表示范围更大, 可以将 double 赋值给 long, 但是不能将 long 赋值给 double.
  • 总之, 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型, 反之不行.

2. int 和boolean 相互赋值

public class TestDemo {
    public static void main(String[] args) {
        int a = 10;
        // Boolean b = (boolean)a;

        boolean c = true;
        //int d = (boolean)c;
    }
}

int 和 boolean 是毫不相干的两种类型,不能互相赋值

3.int 字面值常量给 byte 赋值

将一个字面值常量进行赋值时,Java会自动针对数字范围进行检查

七、数值提升

1.int 和 long混合运算

public class TestDemo {
    public static void main(String[] args) {
        int i1 = 10;
        long l1 = 20;
        //int i2 = i1 + l1; //报错  会将int类型提升为long类型
        int i2 = (int)(i1 + l1);
    }
}

当 int 和 long 混合运算时, int 会提升成 long, 得到的结果仍然是long类型, 需要 long 类型的变量接收结果. 如果非要用 int 来接收结果, 就需要强制类型转换.

2. byte 和 byte 的运算

public class TestDemo {
    public static void main(String[] args) {
        byte a = 1;  // byte取值范围-128~127
        byte b = 2;
        //byte c = a + b;  //报错
        //原因:对于CPU来说, 小于4个字节运算时,会提升为int类型 (a+b)为int型,不能赋值给byte,只能强制类型转换
        byte c = (byte)(a + b);
        System.out.println(c);

        byte c2 = 1 + 2;  //不报错  1和2都是常量,在程序编译时, 这里已经被编译为3了(byte c2 = 3)

    }
}

由于CPU通常是按照4个字节为单位从内存中读写数据. 为了硬件上实现方便,诸如 byte 和 short 这4个字节的类型, 会先提升成 int , 在参与计算.

  • 不同类型的数据混合运算, 范围小的会提升成范围大的

3.int 和 String 之间的相互转换

  • int 转成 String
  • String 转成 int

体现了包装类的作用,  八种基本数据类型都有包装类(int -> Integer,  char -> Character, 其余首字母大写)

public class TestDemo {
    public static void main(String[] args) {
        int num = 10;
        String ret = String.valueOf(num);  //valueOf(int i): 返回int参数的字符串
        System.out.println(num);

        String str = "123";
        int ret1 = Integer.valueOf(str);  //将字符串类型返回成整型参数
        System.out.println(ret1 +1);   //124
    }
}

八、运算符

1.算术运算符

①基本四则运算 + – * / %

  • int / int , 需要用double输出结果
  • 除数不能是0;
  • %: 取余, 求模, 取模
public class TestDemo {
    public static void main(String[] args) {
        System.out.println(-10%3);    //-1
        System.out.println(10%-3);    //1
        System.out.println(-10%-3);   //-1
    }
}

②增量赋值运算符  +=  -=  *=  /=  %=

public class TestDemo {
    public static void main(String[] args) {
        int a = 10;
        a += 1;  //a = a + 1
        System.out.println(a);   //11

        short s = 10;
        s += 9;   //自动进行强制类型转换
        System.out.println(s);
    }
}

③自增/自减运算符  ++  —

public class TestDemo {
    public static void main(String[] args) {
        int a= 10;
        a++;
        System.out.println(a);  //11

        int b = 10;
        ++b;               //前置++  和  后置++ 这样写没有区别
        System.out.println(b);  //11

      
        int c= 10;
        int i1 = c++;    //先赋值后++; 
        System.out.println(i1);  //10

        int d = 10;
        int i2 = ++d;   //先++后赋值    c = c + 1   i2 = c
        System.out.println(i2);  //11
    }
}

2.关系运算符

==  !=  <  >   <=   >=

关系运算符的表达式返回值都是boolean类型

public class TestDemo {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(a == b);  //false
        System.out.println(a != b);  //true
        System.out.println(a < b);   //true
        System.out.println(a > b);   //false
        System.out.println(a <= b);  //true
        System.out.println(a >= b);  //false
    }
}

3.逻辑运算符

&&   ||   !

逻辑运算符的操作数和返回值都是boolean类型

  • [表达式1 && 表达式2 ]   只要一个表达式为假, 整个表达式都为假 ( 短路: 如果表达式1为假,就不执行表达式2)
  • [表达式1 || 表达式2 ]   只要一个表达式为真, 整个表达式都为真 ( 短路: 如果表达式1为真,就不执行表达式2)
  • [ !表达式 ]  结果与表达式相反
public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 30;
        System.out.println(a > b && b < c);  //false :   false && true   b < c不执行
        System.out.println(a < b || b > c);  //true  :   true || false   b > c不执行
        System.out.println(!(a < b));   //false   : !true
    }
}

4.位运算符

&  |  ~  ^

  • Java中对数据操作的最小单位是二进制位
  • 位操作表示按二进制位运算.

① 按位与&: 如果两个二进制位对应位都是1, 则结果为1, 否则结果为0.

0000 1101

0010 1011 &

——————

0000 1001

②按位或 | : 如果两个二进制位对应位有1, 则结果为1, 否则结果为0.

0000 1101

0010 1011  |

——————

0010 1111

③按位异或 ^ : 如果两个二进制位对应位一样, 则结果为0,否则为1.(本质找不同)

0000 1101

0010 1011  ^

——————

0010 0110

④按位取反 ~ : 0变1, 1变0

0101 1011 ~

1010 0100

十进制 -> 二进制 -> 八进制 -> 十六进制

二进制(0000 1010 1011 0010)转八进制

000 000 101 010 110 010  ->

0     0     5     2     6    2

二进制(0000 1010 1011 0010)转十六进制

0000 1010 1011 0010  ->

0       a      b      2

5.移位运算

<<(左移)    >>(右移)   >>>(无符号右移)

<<(左移)

0000 1011  << 1  ->  0001 0110   ==>  22     => 11*2^1

0000 1011  << 2  ->  0010 1100   ==>  44     => 11*2^2

>>(右移补符号位)

0000 1011  >> 1  ->  0000 0101   ==>  5     => 11/2^1

0000 1011  >> 2  ->  0000 0010   ==>  2    => 11/2^2

1111 1111  >>  1  ->  1111 1111

>>>(无符号右移): 不管符号位是啥, 左边统一补0 [ 没有无符号左移]

1111 1111  >>>  1  -> 0111 1111

6.条件运算符

表达式1 ?表达式2 : 表达式3    (表达式1 必须为布尔表达式)

public class TestDemo {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int max = a > b ? a : b;
        System.out.println(max);  //20
    }
}

7.运算符的优先级

不需要特别记忆优先级的高度顺序, 只需要根据逻辑加括号就可以



版权声明:本文为m0_58274834原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。