数据类型

java是一种强类型语言,每个变量都必须声明其数据类型

1、强弱类型语言

  • 强类型语言

    是一种强制类型定义的语言,变量一旦定义了数据类型,如果不进行强制转换,那它就只能是这个类型。Java、.net 、Python、C++等语言都是强类型语言

    public static void main(String[] args){
            int num ;
            //System.out.println(num);
            //Variable 'num' might not have been initialized
            //没有初始化的变量无法被使用
        }
    
  • 弱类型语言

    是一种弱类型定义的语言,变量可以根据环境变化自动进行转换数据类型,不需要经过显性强制转换

  • 区别

    判别的根本是是否会隐性的进行语言类型转变。强类型语言在速度上略逊于弱类型语言,但是强类型定义语言带来的严谨性又能避免不必要的错误,提高了安全性

2、数据类型

在Java中数据类型分为两类:基本类型(primitive type)和引用类型 (reference type)

  • 基本类型

    整数默认是int类型,定义long类型时要在数值后加上L或l

    浮点数默认是double类型,定义float类型时要在数值后加上F或f-

    基本数据类型 占内存(字节) 取值范围 默认值
    byte 1 -128~127 (byte)0
    short 2 -32768~32767 (short)0
    int 4 -2147483648~2147483647 即 -215~215-1 0
    long 8 -2^31 ~ 2^31-1 0L
    float 4 负数:-3.402823E38 ~ -1.401298E-45 正数:1.401298E-45 ~ 3.402823E38 0.0F
    double 8 负数:-1.79769313486232E308~-4.94065645841247E-324 正数:4.94065645841247E-324~1.79769313486232E308 0.0
    char 2 Umicode字符,用单引号括起来,如'a'、'啊' '\u0000'
    booleam 1 true,false false
    public static void main(String[] args){
        	int num_int = 100;
        	long num_long = 51321561584132185L;
        	short num_short = 2355;
        	double num_double = 3.5;//双精度
        	double num_double1 = 3;
        	float num_float = (float)3.5; //单精度
        	float num_float1 = 3.5F;	
        	boolean isPass = true;
        	boolean isOk = false;
        	boolean isBig = 88>5;
        	char f = '女';
        	char m = '男';
    }
    
  • 引用类型的大小统一为4个字节,记录的是其引用对象的地址

Java中JDK对每种基本类型都进行了包装,每个类型都有对应的包装类供开发者使用

public static void main(String[] args){
        //byte
        System.out.println("byte = java.lang.Byte");
        System.out.println("SIZE"+Byte.SIZE);
        System.out.println("MIN_VALUE"+Byte.MIN_VALUE);
        System.out.println("MAX_VALUE"+Byte.MAX_VALUE);
        System.out.println();

        //short
        System.out.println("short = java.lang.Short");
        System.out.println("SIZE"+Short.SIZE);
        System.out.println("MIN_VALUE"+Short.MIN_VALUE);
        System.out.println("MAX_VALUE"+Short.MAX_VALUE);
        System.out.println();

        //int
        System.out.println("int = java.lang.Integer");
        System.out.println("SIZE"+Integer.SIZE);
        System.out.println("MIN_VALUE"+Integer.MIN_VALUE);
        System.out.println("MAX_VALUE"+Integer.MAX_VALUE);
        System.out.println();

        //long
        System.out.println("long = java.lang.Long");
        System.out.println("SIZE"+Long.SIZE);
        System.out.println("MIN_VALUE"+Long.MIN_VALUE);
        System.out.println("MAX_VALUE"+Long.MAX_VALUE);
        System.out.println();

        //float
        System.out.println("float = java.lang.Float");
        System.out.println("SIZE"+Float.SIZE);
        System.out.println("MIN_VALUE"+Float.MIN_VALUE);
        System.out.println("MAX_VALUE"+Float.MAX_VALUE);
        System.out.println();

        //double
        System.out.println("double = java.lang.Double");
        System.out.println("SIZE"+Double.SIZE);
        System.out.println("MIN_VALUE"+Double.MIN_VALUE);
        System.out.println("MAX_VALUE"+Double.MAX_VALUE);
        System.out.println();

        //char
        System.out.println("char = java.lang.Character");
        System.out.println("SIZE"+Character.SIZE);
        System.out.println("MIN_VALUE"+Character.MIN_VALUE);
        System.out.println("MAX_VALUE"+Character.MAX_VALUE);
    }

关于字节

位(bit),是计算机的最小存储单位,例:11001100这是一个八位二进制数

字节(byte),是计算机中数据处理的基本单位,1byte = 8bit

字符,是指计算机中使用的字母、数字、汉字和符号

3、编码

计算机启动、编译、程序的执行都需要基于计算机的编码系统,负责电脑内部代表字母或数字的方式。常用的有ASCII编码、UTF-8编码、Unicode编码等

  • ASCIIS

    表示符 占用大小
    1个英文字符不区分大小写 1byte
    1个中文汉字 2byte
    1个ACIIS码 1byte
  • UTF-8

    表示符 占用大小
    1个英文字符 1byte
    英文标点 1byte
    1个中文 3byte
    中文标点 3byte
  • Unicode

    表示符 占用大小
    1个英文字符 2byte
    英文标点 2byte
    1个中文 2byte
    中文标点 2byte

4、拓展

在计算机汇编语言中,常用的进制有二进制八进制十进制

  • 二进制,只有0、1
  • 八进制,要求以0开头,如:0100、0214
  • 十进制,就是日常使用的整数,50、100、-52
  • 十六进制,要求以0x或0X开头,如0x1、0X457
public static void main(String[] args) {
        int i10 = 100;
        int i8 = 015;
        int i16 = 0x15;
        System.out.println(i10);//100
        System.out.println(i8);//13
        System.out.println(i16);//21
}

由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。浮点数一般都存在舍入误差,很多数字无法精确表示,其结果只能是接近,但不等于;二进制浮点数不能精确的表示0.1,0.01,0.001这样10的负次幂。并不是所有的小数都能可以精确的用二进制浮点数表示

如果需要进行不产生舍入误差的精确数字计算,需要使用Big Decimal类。Java.math下面的两个有用的类:BigIntegerBig Decimal,这两个类可以处理任意长度的数值

BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。

避免比较中使用浮点数

float f = 0.1f;
double d = 1.0/10;
System.out.println(f == d);//false
float f1 = 132153153215f;
float f2 = f1 + 1;
System.out.println(f1 == f2);//true

单引号用来表示字符常量。char 类型用来表示在Unicode编码表中的字符

char c1 = 'a';
char c2 = '你';
System.out.println(c1);
System.out.println((int) c1);//97
System.out.println(c2);
System.out.println((int) c2);//20320

Unicode具有从0到65535之间的编码,他们通常用从’u0000’到’uFFFF’之间的十六进制值来表示(前缀为 u表示Unicode)

char c3 = '\u0061';//a

java还允许使用转义字符来将其后的字符转变为其它的含义

\b 退格 \u0008
\n 换行 \u000a
\r 回车 \u000d
\t 制表符tab \u0009
" 双引号 \u0022
' 单引号 \u0027
\ 反斜杠 \u005c

boolean类型有两个值,true和false,不可以 0 或非 0 的整数替代 true 和 false ,用来判断逻辑条件,一般用于程序流程控制

boolean flag = false;
if(flag){
    int a = 1;
}else{
    int a = 0;
}

在上列判断语句中放上flag也就等于放上了false,因为flag1的值是false,不用再去做判断 flag == false

posted @   hello_12153_98  阅读(78)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示