跳至主要內容

数据类型

Emilia Zhen大约 5 分钟Java

注释

// 单行注释

/*




*/

/**
 * 文档注释
*/

常用数据

整数

int numberA = 0;

小数

double numberB = 0.1;

字符

char charA = 's';
char charB = 'E';

字符串

String stringA = "wefew";
String stringB = "";

布尔值

Boolean boolA = false;

空值

null;

二进制

只有01,按照逢二进一的方式表示数据

0 ──►  0
1 ──►  1
2 ──►  10
3 ──►  11
4 ──►  100
5 ──►  101

十进制转二进制

除二取余法

6 ÷ 2 = 3 ··· 0
3 ÷ 2 = 1 ··· 1
1 ÷ 2 = 0 ··· 1
// 6的二进制为 110
13 ÷ 2 = 6 ··· 1
6 ÷ 2 = 3 ··· 0
3 ÷ 2 = 1 ··· 1
1 ÷ 2 = 0 ··· 1
// 13的二进制为 1101

计算机最小单位

  • 使用 8 个二进制位为一组,称之为一个字节(byte,简称 B)
  • 字节中的每一个二进制位就称之为位(bit,简称 b)1B=8b
  • B的基础上,计算机发展出了KBMBGBTB、…. 这些数据单位
数据6 --二进制--> 110 --存储--> 00000110

字符在计算机中的存储

ASCII 编码表: 即美国信息交换标准编码,规定了现代英语、数字字符、和其他西欧字符对应的数字编号。

字符十进制字符十进制字符十进制
064A81a113
165B82b114
266C83c115

字符在计算中存的是ASCII对应的数字的二进制,如字符'a'存的就是113的二进制

图片在计算机中的存储

图片就是无数个像素点组成的,每个点用(0~255,0~255,0~255)表示其颜色


     ██╗ █████╗ ██╗   ██╗ █████╗
     ██║██╔══██╗██║   ██║██╔══██╗
     ██║███████║██║   ██║███████║
██   ██║██╔══██║╚██╗ ██╔╝██╔══██║
╚█████╔╝██║  ██║ ╚████╔╝ ██║  ██║
 ╚════╝ ╚═╝  ╚═╝  ╚═══╝  ╚═╝  ╚═╝

█ -> ▓ -> ▒ ->  ░ -> :: -> □■□□■□

声音在计算机中的存储

声音波形图以二进制记录下来

111 ------●●-------------------
110 ----●----●-----------------
101 --●--------●---------------
100 ●------------●-------------
Time ──────────────────────────
011 ----------------●---------●
010 ------------------●------●-
001 -------------------●---●----
000 --------------------●●-----

二进制转十进制

// 二进制11 :
2³   2²   2¹   2⁰
*    *    *    *
0    0    1    1
──────────────────────────
0  + 0  + 2  + 1  =  3

八进制、十六进制

  • 为了便于观察和表示二进制,推出了八进制和十六进制
  • 每 3 位二进制作为一个单元,最小数是0,最大数是7,一共8个数字,这就是八进制
    // 97的二进制 01100001  ──►  01 100 001 ──►  141
    
  • 每 4 位二进制作为一个单元,最小数是0,最大数是15,一共16个数字,这就是八进制
    // 97的二进制 01100001  ──►  0110 0001 ──►  61
    // 250的二进制 11111010  ──►  1111 1010 ──►  FA
    

    提示

    Java程序中支持书写二进制、八进制、十六进制的数据,分别需要以0B或者0b00X或者0x开头。

基本数据类型

数据类型内存占用(字节数)数据范围
整型byte1-128~127
short2-32768~32767
int(默认)4-2147483648~2147483647 (10位数,大概21亿多)
long8-9223372036854775808 ~ 9223372036854775807 (19位数)
浮点型float41.401298 E -45 到 3.4028235 E +38
double(默认)84.9000000 E -324 到1.797693 E +308
字符型char20~65535
布尔型boolean1true/false
// 23默认是int,末尾加L或l为Long数据
long a = 23L;
// 23默认是double,末尾加F或f为float数据
float b = 23.8F;

数据类型自动转换

  • 类型范围小的变量,可以直接赋值给类型范围大的变量
    // a 00001100 (8位)
    byte a = 12;
    // b 00000000 00000000 00000000 00001100 (32位)
    int b = a;
    
  • 自动类型转换其他形式
    byte ──►  short ──►  int ──►  long ──► float ──►  double
    
                 char ───┘
    
  • 表达式的自动类型转换 在表达式中,小范围类型的变量会自动转换成表达式中较大范围的类型再参与运算
    byte、short、char ──► int ──►  long ──► float ──► double
    
    表达式的最终结果类型由表达式中的最高类型决定 在表达式中,byte、short、char 是直接转换成 int 类型参与计算的

强制类型转换

  • 强制类型转换可能造成数据(丢失)溢出
  • 浮点型强制转成整型,直接丢掉小数部分,保留整数部分返回
  • IDEA 中快捷键Alt+Enter
int a = 20;  // 00000000 00000000 00000000 00010100 (32位,第一位0表示正数)
byte b = (byte)a; // 00010100 (8位)
// 20

int i = 1500; // 00000000 00000000 00000101 11011100 (32位,第一位0表示正数)
byte j = (byte)i; // 11011100 (8位,第一位1表示负数) 二进制数按照补码为-36
// -36

运算符

基本运算符

  • +-*/%
  • 两个整数相除的结果还是整数
      5 / 2;
      // 2
      int a = 5;
      a * 1.0 / 2;
      // 2.5
    
  • +号能做字符拼接,能算则会先算再做拼接
      "ab" + "cd";
      // abcd
      a + 5 + "min";
      // 10min
      a + 'a' + "room";
      // 102room
    

自减自增运算符

放在某个变量前面或者后面,对变量自身的值加1/减1

int a = 0;
a++;
// 1
a--;
// 0
int b = ++a;
// b: 1, a: 1;
int c = a++;
// c: 1, a: 2;

赋值运算符

  • 赋值运算符=

    int a = 1;
    
  • 扩展运算符+=-=*=/=%=

    a += b;
    // a = (a的类型)(a + b)
    

    扩展的赋值运算符隐含了强制类型转换

  • 关系运算符>>=<<===!=

  • 逻辑运算符&|!^&&||

      true & false;
      // false
      false | true;
      // true
      !false;
      // true
      (1+2) ^ (2+1);
      // true
      int a = 0;
      false && true;
      // false
      true || true;
      // true
    
  • 三元运算符

  int score = 98;
  score > 60 ? '合格' : '不合格';
  // 合格

API

程序使用说明书Jdk17 文档open in new window 接收键盘输入数据

package com.emiliazhen.scanner;
import java.util.Scanner;
public class KeyboardTest {
  public static void main (String[] args) {
    // 键盘扫描器对象
    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入你的年龄:");
    int age = scanner.nextInt();
    // 等待接收用户键盘数据
    System.out.println("请输入你的昵称:");
    // 等待接收用户键盘数据
    String name = scanner.next();
    System.out.println("欢迎你," + name);
    // System、String在JDK中的Java.lang包下,已默认引入不需再导入
  }
}