plh97 / blog

✏️blog. writing in issues.
https://plhh.xyz/
82 stars 8 forks source link

Java - 基本数据类型 #120

Closed plh97 closed 5 years ago

plh97 commented 6 years ago

Java 基本数据类型,基本介绍

变量就是申请内存来储存.也就是说,当创建变量的时候,需要在内存中申请空间. 内存管理系统根据变量的类型为变量分配储存空间,分配的空间只能用来储存该类型数据.

Java两大类型数据

内置数据类型

实例

对于数值类型的基本类型的取值方位,我们无需强制去记忆,因为他们的值都已经以常理的形式定义在对应的包装类中了.请看下面代码例子;

package demo;

/**
 * @author PengLiHeng
 * @version v.0.0.1
 * @fate 2018/11/16 18:19
 */
public class PrimitiveTypeTest {
    public static void main(String[] args) {
        // byte
        System.out.println("基本类型: byte二进制位数" + Byte.SIZE);
        System.out.println("包装类: java.lang.Byte");
        System.out.println("最大值: " + Byte.MAX_VALUE + " (2^" + (Byte.SIZE-1) + "-1)");
        System.out.println("最小值: " + Byte.MIN_VALUE + " (-2^" + (Byte.SIZE-1) + ")");
        System.out.println("\n");

        // short
        System.out.println("基本类型: short二进制位数" + Short.SIZE);
        System.out.println("包装类: java.lang.Short");
        System.out.println("最大值: " + Short.MAX_VALUE + " (2^" + (Short.SIZE-1) + "-1)");
        System.out.println("最小值: " + Short.MIN_VALUE + " (-2^" + (Short.SIZE-1) + ")");
        System.out.println("\n");

        // int
        System.out.println("基本类型: int二进制位数" + Integer.SIZE);
        System.out.println("包装类: java.lang.Integer");
        System.out.println("最大值: " + Integer.MAX_VALUE + " (2^" + (Integer.SIZE-1) + "-1)");
        System.out.println("最小值: " + Integer.MIN_VALUE + " (-2^" + (Integer.SIZE-1) + ")");
        System.out.println("\n");

        // long
        System.out.println("基本类型: long二进制位数" + Long.SIZE);
        System.out.println("包装类: java.lang.Long");
        System.out.println("最大值: " + Long.MAX_VALUE + " (2^" + (Long.SIZE-1) + "-1)");
        System.out.println("最小值: " + Long.MIN_VALUE + " (-2^" + (Long.SIZE-1) + ")");
        System.out.println("\n");

        // float
        System.out.println("基本类型: float二进制位数" + Float.SIZE);
        System.out.println("包装类: java.lang.Float");
        System.out.println("最大值: " + Float.MAX_VALUE + " (2^" + (Float.SIZE-1) + "-1)");
        System.out.println("最小值: " + Float.MIN_VALUE + " (-2^" + (Float.SIZE-1) + ")");
        System.out.println("\n");

        // double
        System.out.println("基本类型: double二进制位数" + Double.SIZE);
        System.out.println("包装类: java.lang.Float");
        System.out.println("最大值: " + Double.MAX_VALUE + " (2^" + (Double.SIZE-1) + "-1)");
        System.out.println("最小值: " + Double.MIN_VALUE + " (-2^" + (Double.SIZE-1) + ")");
        System.out.println("\n");

        // char
        System.out.println("基本类型: char二进制位数" + Character.SIZE);
        System.out.println("包装类: java.lang.Character");
        System.out.println("最大值: " + (int) Character.MAX_VALUE + " (2^" + (Character.SIZE-1) + "-1)");
        System.out.println("最小值: " + (int) Character.MIN_VALUE);
        System.out.println("\n");
    }
}

引用类型

Java 常量

常量在程序运行的时候不能被修改. 在java常量中使用final关键字来修饰常量.,声明方式和变量类似;

final double PI = 3.1415927;

虽然常量名也可以用小写,但是为了便于识别,通常时候用大写字母来表示常量. 字面量可以赋值给任何内置类型的变量; 例如:

byte a = 68;
chat a = "a";

byte, int , long 和 short 都可以用十进制,16进制以及8进制的方式表示. 当使用常量的时候,前缀0表示8进制,. 而前缀0x代表16进制,例如:

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

字符串常量和字符常量都可以包含任意Unicode字符.例如:

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

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

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

自动类型转换

int类型,常量, 字符型数据可以混合运算.运算中,不同类型的数据转化为同一类型,然后进行运算.转换从低级到高级.

低  ----------------------------  高
byte, short,chat -> int -> long -> float -> double

数据类型转换必须满足如下条件:

(int)23.7 == 23;

自动类型转换

必须满足转换前的数据类型的位数要低于转换后的数据类型,例如 short数据类型的位数为16位,就可以自动转换成位数为32的int类型,

package demo;

/**
 * @author PengLiHeng
 * @version v.0.0.1
 * @fate 2018/11/16 19:31
 */
public class autoTypeTranslate {
    public static void main(String[] args) {
        char c1 = 'a'; a 对应的ASCll 码表克制对应的int类型值为97, A对应值为65, 所以`i2=65+1=66`
        int i1 = c1;
        System.out.println(i1);  // 97

        char c2 = 'a';
        int i2 = c2+1;
        System.out.println(i2);  // 98
    }
}

强制类型转换

/**

隐含强制类型转换: