c02章.s06节.数据类型

数据类型

[toc]

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

内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。

一 计算机中的二进制

当前计算机中的数据都是由0,1组成,因为电子器件表示开和关,或者高电压和低电压这两种状态比较稳定。

那么表示0和1的一个单位叫做bit(比特),计算机中存储表示数据一般以8个bit为单位,既一个Byte(字节)。

1024Byte = 1KB, 1024KB = 1MB, 1024MB = 1GB, 1024GB = 1TB, 1024TB = 1PB

另外在数据传输时大多是以“位”(bit“比特”)为单位,所以你家里的百兆宽带都是100Mb。是小b。

Java 语言支持的数据类型分为两种:基本数据类型(Primitive Type)和引用数据类型(Reference Type)。

二 Java基本数据类型

基本数据类型包括 boolean(布尔型)、float(单精度浮点型)、char(字符型)、byte(字节型)、short(短整型)、int(整型)、long(长整型)和 double (双精度浮点型)共 8 种,详见下表所示。

关键字byte和字节Byte是不一样的概念。

类型名称 关键字 占用内存 取值范围
字节型 byte 1 字节 -128~127
短整型 short 2 字节 -32768~32767
整型 int 4 字节 -2147483648~2147483647
长整型 long 8 字节 -9223372036854775808L~9223372036854775807L
单精度浮点型 float 4 字节 +/-3.4E+38F(6~7 个有效位)
双精度浮点型 double 8 字节 +/-1.8E+308 (15 个有效位)
字符型 char 2 字节 Unicode 字符
布尔型 boolean 1 字节 true 或 false

提示:char 代表字符型,实际上字符型也是一种整数类型,相当于无符号整数类型。

六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

其中比较常用的就是byte,int,long,double,boolean

三 字节型byte

  • byte 数据类型是8位、有符号的,以二进制补码表示的整数;

  • 最小值是 -128(-2^7)

  • 最大值是 127(2^7-1)

  • 默认值是 0

  • byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;

    计算机的原理,补码决定了byte的范围。具体原理这里不做讲解。只需要知道大致范围即可。

public class DataType01_byte {

    public static void main(String[] args) {
        //这里的Byte是一个包装类,后面会讲到.值上等价于基本类型.同理后面的包装类Short,Integer,Long,Float,Double,Boolean.
        System.out.println("基本类型:byte,二进制位数:" + Byte.SIZE);
        System.out.println("最大值:" + Byte.MAX_VALUE);//最大值127
        System.out.println("最小值:" + Byte.MIN_VALUE);//最小值-128
        //定义一个byte
        byte a = 20;
        System.out.println(a);
        //定义另一个byte
        byte b = -50;
        System.out.println(b);
    }
}

四 短整型short

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

    public static void main(String[] args) {
        //这里的Short是一个包装类
        System.out.println("基本类型:short,二进制位数:" + Short.SIZE);
        System.out.println("最大值:" + Short.MAX_VALUE);//32767
        System.out.println("最小值:" + Short.MIN_VALUE);//-32768
        //定义一个整型
        short a = 10;
        //定义学校的人数
        short student = 11100;
        System.out.println(student);
    }
}

五 整型int

  • int 数据类型是32位、有符号的以二进制补码表示的整数;

  • 最小值是 -2,147,483,648(-2^31)

  • 最大值是 2,147,483,647(2^31 - 1)

  • 一般地整型变量默认为 int 类型;

  • 默认值是 0

public class DataType03_int {

    public static void main(String[] args) {
        //这里的Integer是一个包装类,后面会讲到.值上等价于基本类型.同理后面的Long,Double,Boolean.
        System.out.println("基本类型:int,二进制位数:" + Integer.SIZE);
        System.out.println("最大值:" + Integer.MAX_VALUE); //2147483647
        System.out.println("最小值:" + Integer.MIN_VALUE); //-2147483648
        //定义一个整型
        int a = 10;
        //定义一个城市的人数
        int cityPeople = 5000000;
        //定义一个人很穷,资产是负整数
        int fortune = -100;
        System.out.println(fortune);
    }
}

六 长整型long

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

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

public class DataType04_long {

    public static void main(String[] args) {
        System.out.println("基本类型:long,二进制位数:" + Long.SIZE);
        System.out.println("最大值:" + Long.MAX_VALUE);
        System.out.println("最小值:" + Long.MIN_VALUE);
        //定义一个长整型
        long a = 60L; //有一个尾巴L,表示是长整型.l也是可以的.但为了防止看错成数字'1',一般用L.
        //定义地球的人口数量,值已经大于int最大值.
        long earthNumber = 7200000000L;
        //定义一个大型公司的负债
        long loan = -10000000000L;
        System.out.println(loan);
    }
}

七 单精度浮点数float

  • float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;

  • float 在储存大型浮点数组的时候可节省内存空间;

  • 默认值是 0.0f

  • 浮点数不能用来表示精确的值,如货币;

    public class DataType05_float {
    
        public static void main(String[] args) {
            //float
            System.out.println("基本类型:float,二进制位数:" + Float.SIZE);
            System.out.println("最大值:" + Float.MAX_VALUE);
            System.out.println("最小值:" + Float.MIN_VALUE);
            //定义一个单精度浮点数
            float aValue = 0.1f; //有一个尾巴F(f),表示是float.
            System.out.println("浮点数的不精确:" + aValue/1.0);//注意查看打印值。比如我的机器为:0.10000000149011612
        }
    }
    

八 双精度浮点数double

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

    public static void main(String[] args) {

        //double
        System.out.println("基本类型:double,二进制位数:" + Double.SIZE);
        System.out.println("最大值:" + Double.MAX_VALUE);
        System.out.println("最小值:" + Double.MIN_VALUE);
        //定义一个双精度浮点数
        double dValue = 0.01d; //D(d),默认可以省略.
        System.out.println("浮点数的不精确:" + dValue/0.1);//注意查看打印值。比如我的机器为:0.09999999999999999
    }
}

九 布尔型boolean

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

    public static void main(String[] args) {
        //boolean
        boolean wisdom = true;
        boolean wealth = false;
        System.out.println("wisdom:" + wisdom);
        System.out.println("wealth:"+wealth);
    }
}

十 字符型char

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

Unicode是一个编码方案,它为世界上每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

char 代表字符型,实际上字符型也是一种整数类型,相当于无符号整数类型。可以强制转为int类型,查看其大小。

这里只要知道概念原理就行。开发中不会用到。

Unicode的转码,可以用网上的工具:转码工具网站地址`

public class DataType08_char {

    public static void main(String[] args) {
        //这里的Character是一个包装类
        System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
        // 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
        System.out.println("最小值:Character.MIN_VALUE=" + (int) Character.MIN_VALUE);
        // 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
        System.out.println("最大值:Character.MAX_VALUE=" + (int) Character.MAX_VALUE);

        char character = 'A';
        System.out.println(character);
        System.out.println((int)character);//强制转换为整型,可以比较整数大小。
        char special_one = '$';
        System.out.println(special_one);
        char han_zi = '\u4f60';
        System.out.println(han_zi);
        System.out.println('\u52a0');
        System.out.println('\u6cb9');
        
    }
}

十一 类型默认值

下表列出了 Java 各个类型的默认值:

数据类型 默认值
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
String (or any object) null
boolean false

打印出默认值:

public class DefaultValue {

    byte byteData;
    short shortData;
    int intData;
    long longData;
    float floatData;
    double doubleData;
    boolean booleanData;
    char charData;
    String stringData;

    public static void main(String[] args) {
        DefaultValue defaultValue = new DefaultValue();
        System.out.println("byte默认值:"+defaultValue.byteData);
        System.out.println("int默认值:"+defaultValue.intData);
        System.out.println("short默认值:"+defaultValue.shortData);
        System.out.println("long默认值:"+defaultValue.longData);
        System.out.println("float默认值:"+defaultValue.floatData);
        System.out.println("double默认值:"+defaultValue.doubleData);
        System.out.println("boolean默认值:"+defaultValue.booleanData);
        System.out.println("String默认值:"+defaultValue.stringData);
        System.out.println("char默认值:"+defaultValue.charData);
        System.out.println("char默认值(数值):"+(int)defaultValue.charData);
    }
}

十二 引用类型

8种基本数据类型以外的都是引用类型. 引用数据类型建立在基本数据类型的基础上,包括数组、类和接口。引用数据类型是由用户自定义,用来限制其他数据的类型。

  • 引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 之前定义的Book等许多类创建的对象。变量一旦声明后,类型就不能被改变了。
  • 对象、数组都是引用数据类型。
  • 所有引用类型的默认值都是null。
  • 一个引用变量可以用来引用任何与之兼容的类型。

以下是所有数据类型,其中的接口和数组我们在后面会学习.

type.jpg

十三 转义字符

Java语言支持一些特殊的转义字符序列。列出常用的.

符号 字符含义
\n 换行 (0x0a)
\r 回车 (0x0d)
\t 制表符
\" 双引号
\' 单引号
\ 反斜杠
public class EscapeCharacter {

    public static void main(String[] args) {
        System.out.println("转义字符测试:\n,具有换行效果."); //在Unix内核的系du统中换行就是\n,但是windows系统中换行需要\r\n都用.作用主要就是在文本的显示效果上另起一行.
        System.out.println("转义字符测试:\t,具有Tab按键效果.");
        //特殊字符的打印,字符串的用法是双引号成对. 如果字符串中含有双引号,那么需要用反斜杠转义才可以识别.
        System.out.println("转义字符测试:\",打印双引号.");
        //同样的,反斜杠也是特殊字符
        System.out.println("转义字符测试:\\,打印反斜杠.");
        //在char字符中,单引号是成对出现的,如果需要使用单引号,也需要用反斜杠转义.
        char charData = '\'';
        System.out.println("转义字符测试,打印单引号:"+charData);

        //有时候抓取别人网站数据的时候,看到\u的特殊字符串,基本都是unicode转义字符.我们可以在网上用转码工具查询.
        char a = '\u4f60';
        String b = "\u52a0";
        String c = "\u6cb9";
        System.out.println(a+b+c);
    }
}

文章和项目开源地址

一起学习,最简单易懂的Java零基础入门,答疑解惑,关注点赞github开源:https://github.com/BradYan/easy-java

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容