java数据类型

1. java数据类型概述

Java语言中的数据类型分为两大类,分别是基本类型和引用类型。程序中需要处理许多数据,对于不同数据都有其对应的数据类型,其实就是在内存中开辟一个存储空间来存放数据,不同数据所开辟的内存大小也会不一样。

2. 数据存储的单位

位、字节、字 是计算机数据存储的单位。位是最小的存储单位,每一个位存储一个1位的二进制码,一个字节由8位组成。而字通常为16、32或64个位组成。

位(bit):是计算机中最基本的单位,位是最基本的概念,在计算机中,由于只有逻辑0和逻辑1的存在,即每一个逻辑0或者1便是一个位

字节(byte):计算机中处理数据的基本单位,是由八个位组成的一个单元,8个bit组成1个Byte

字(word):代表计算机处理指令或数据的二进制数位数,是计算机进行数据存储和数据处理的运算的单位,在常见的计算机编码格式下,一个字等于两个字节(十六位)(1word = 2Byte = 16bit)

3. 基本数据类型

Java基本类型共有八种,基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。JAVA中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。实际上,JAVA中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。

3.1 八种数据类型

3.2 基本数据类型的字节数及表示范围

整型(4个): byte(字节型)、short(短整型)、int(整型)、long(长整型)

byte a = 100;

short s = 1000;

int a = 100000;

long a = 100000L;

注. 声明long类型数据的时候,后面需要加L或者l (一般加大写L);

浮点型(2个):float(单精度型/浮点型) 、double(双精度型)

float f1 = 1.1f;

double d1 = 1.2;

注.声明float类型的数据的时候加f或者F;

double类型的数据的有效位数 15~16;

3.float类型的数据有效位数是 6~7;

字符(1个): char(字符型)

**注.**声明char类型的数据的时候,使用单引号声明。并且单引号里面只能放一个元素;

char name = 'a'

布尔类型:(1个): boolean(布尔类型)

一般用来做逻辑判断,一般用于流程控制,数据值只有true或false,适用于逻辑计算。

4. 包装类型

Java 是面向对象的语言,但是为了便于开发者的使用,Java 中却沿用了 C 语言的基本数据类型,在进行基本的数据计算时,开发者可以直接使用基础类。但是基本数据类型是不具备对象的特征的,不能调用方法,而且基本数据类型不能存入集合中,所以就需要将基础数据类型实例封装为 Java 对象,使其具有了对象的属性和方法。

4.1 基本类型与包装类的区别

存储位置不同:

基本数据类型直接将值放在栈中;

包装类型是把对象放在堆中,然后通过对象的引用来调用他们 ;

初始值不同:

int的初始值为 0 、 boolean的初始值为false ;

包装类型的初始值为null ;

使用方式不同:

基本数据类型直接赋值使用就好;

在集合如 coolectionMap 中只能使用包装类型;

4.2 基本类型与包装类的相互转换

手动转换

基本数据类型 → 包装类:

通过对应包装类的构造方法实现,除了Character外,其他包装类都可以传入一个字符串参数构建包装类对象。

包装类 → 基本数据类型

通过包装类的实例方法 xxxValue() 实现; // xxx表示包装类对应的基本数据类型

自动装箱&自动拆箱(jdk1.5以后)

基本类型添加到集合中时,进行自动装箱

包装类型在涉及到运算的时候,“加,减,乘, 除” 以及 “比较 equals,compareTo”,进行自动拆箱

5. 简单数据类型转换

容量类型排序

简单类型数据间的转换,有两种方式:自动转换和强制转换

5.1 自动类型转换

自动类型转换:容量小的类型自动转换为容量大的数据类型 --> 总结:小容量转大容量

public static void main(String[] args) {

    //1.多个类型数据混合运数时,系统会按最大的类型进行转换

    int a = 10;

    //float a1 = a + 1.1; //错误  结果类型一个是double

    float a2 = a + 1.1F;  //结果类型一个是float

    double a3 = a + 1.1;  //结果类型一个是double

    //2.容量大的赋值给容量小的肯定会报错

    //int b = 1.1; //错误 原因:double -> int

    //3.(byte,short) 和 char之间不会相互自动转换

    byte b1 = 10; //正确

    int b2 = 1;

    //byte b3 = b2; //错误 原因:变量赋值,判断该类型

    //char c1 = b1; //错误 原因:byte不能自动转换为char

    //4.byte,short,char该三个数据类型计算,计算时首先转换为int类型

    byte c1 = 1;

    short c2 = 2;

    //short c3 = c1 + c2; //错误 原因:计算时首先转换为int类型

    int c3 = c1 + c2; //正确

}

5.2 强制类型转换

强制类型转换:将容量大的数据类型转换为容量小的数据类型 --> 总结:大容量转小容量

public static void main(String[] args) {

        //1.精度降低或溢出

        int i = (int) 1.9; //结果 1

        //2.强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级

        //int x = (int) 10 * 3.5 + 6 * 1.5;//编译错误

        int x = (int) (10 * 3.5 + 6 * 1.5);//正确 (int)44.0 -> 44

        //3.char类型可以保留int的常量值,不能保存int的变量值需要强转

        char c = 100; //保留int的常量值

        int i = 100;

        //char m = i; //错误

        char m = (char) i; //正确

}

5.3 隐含强制类型转换(初始化)

在变量的初始化时,整数的默认类型是 int。byte b = 123; 123 默认是 int 类型,他会隐含强制转换为低级别的 byte 和 short 类型,所以不用显示强制转换;但是 int 类型只能显式强制转换为 long 型,所以 long a = 123L;

浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f。

5.4 其他类型转换

包装类型向字符串的转换

String str = "11.1";

Double d = new Float("11.1");   

String str1 = d.toString();

1

2

3

字符串向包装类型的转换

String str = "11.1";

Double d = new Float("11.1");

Double d = Double.parseDouble("11.1"); 

Double d = Double.valueOf("11.1");

基本类型向字符串的转换

Integer a = 1;

a.toString();//调用转字符串的方法

String s =a +  "";//加上""自动转换String类型

String.valueOf(a);//使用String的方法

6. 引用数据类型

6.1 类Class引用

Object :Object是一个很重要的类,Object是类层次结构的根类,每个类都使用Object作为超类,所有对象(包括数组)都实现这个类的方法,用Object可以定义所有的类。

Object object = new Object();

Integer Integer=(Integer)object;//

String :String类代表字符串,Java 程序中的所有字符串字面值(如"abc")都作为此类的实例来实现。检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本、在该副本中、所有的字符都被转换为大写或小写形式。

Date :Date表示特定的瞬间,精确到毫秒。Date的类一般现在都被Calendar 和GregorianCalendar所有代替

Void :Void 类是一个不可实例化的占位符类,它保持一个对代表 Java 关键字 void 的 Class 对象的引用。

6.2 接口interface引用

List:列表 ,此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引 (在列表中的位置)访问元素,并搜索列表中的元素。List 接口提供了两种搜索指定对象的方法。从性能的观点来看,应该小心使用这些方法。在很多实现中,它们将执行高开销的线性搜索。 List 接口提供了两 种在列表的任意位置高效插入和移除多个元素的方法。

add() : 在列表的插入指定元素。

remove():移除列表中指定位置的元素。

get(int index):返回列表中指定位置的元素。

6.3 数组引用

数组:存储在一个连续的内存块中的相同数据类型(引用数据类型)的元素集合。

数组中的每一个数据称之为数组元素,数组中的元素以索引来表示其存放的位置,索引(下标)从0开始。

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

推荐阅读更多精彩内容