JAVA-编程基础-02-数据类型

news/2024/11/9 10:01:02/

Lison <dreamlison@163.com>, v1.0.0, 2023.03.12

数据类型

文章目录

  • 数据类型
    • java数据类型概述
    • 数据存储的单位
    • 基本数据类型
      • 八种数据类型
      • 基本数据类型的字节数及表示范
    • 包装类型
      • 基本类型与包装类的区别
      • 基本类型与包装类的相互转换
    • 简单数据类型转换
      • 自动类型转换
      • 强制类型转换
      • 隐含强制类型转换(初始化)
      • 包装类型与基本类型的转换
      • 其他类型转换
    • 引用数据类型
      • 类Class引用
      • 接口interface引用
      • 数组引用

java数据类型概述

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

数据存储的单位

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

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

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

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

基本数据类型

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

八种数据类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sZw1GIHb-1688110431221)(typora-user-images/bb8c49a809de34c9c5e918f59fc07080.png)]

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

数据类型位数默认值取值范围大小
byte(位)80-2^7 到 2^7 -11字节
short(短整数)160-2^15 到 2^15 -12字节
int(整数)320-2^31 到 2^31 -14字节
long(长整数)640L-2^63 到 2^63 -18字节
float(单精度)320.0f-2^31 到 2^31 -14字节
double(双精度)640.0-2^63 到 2^63 -18字节
char(字符)16‘\u0000’(空)0-2^16-12字节
boolean(布尔值)8falseTrue \false1比特

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

byte a = 100; 
short b = 1000; 
int c = 100000; 
long d = 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,适用于逻辑计算。

包装类型

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

简单类型byteshortintlongfloatdoublebooleanchar
二进制位数81632643264116
封装器类ByteShortIntegerLongFloatDoubleBooleanCharacter

基本类型与包装类的区别

存储位置不同:
基本数据类型直接将值放在栈中;
包装类型是把对象放在堆中,然后通过对象的引用来调用他们 ;
初始值不同:
int的初始值为 0 、 boolean的初始值为false ;
包装类型的初始值为null ;
使用方式不同:
基本数据类型直接赋值使用就好;
在集合如 coolectionMap 中只能使用包装

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

手动转换
基本数据类型 → 包装类:
通过对应包装类的构造方法实现,除了Character外,其他包装类都可以传入一个字符串参数构建包装类对象。
包装类 → 基本数据类型
通过包装类的实例方法 xxxValue() 实现; // xxx表示包装类对应的基本数据类型
自动装箱&自动拆箱(jdk1.5以后)
基本类型添加到集合中时,进行自动装箱
包装类型在涉及到运算的时候,“加,减,乘, 除” 以及 “比较 equals,compareTo”,进行自动拆箱

简单数据类型转换

容量类型排序

在这里插入图片描述

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

自动类型转换

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

1)当一个较低级数据与一个较高级的数据一起运算时,系统将自动将低级数据转换成高级数据,再进行运算。
(2)在方法调用时,低级实参赋值给高级形参时系统将自动将低级数据转换成高级数据,再进行方法的调用。对于多个同名的重载方法,会转换成最"接近"的高级数据并进行调用。

public static void main(String[] args) {//1.多个类型数据混合运数时,系统会按最大的类型进行转换int a = 10;//float a1 = a + 1.1; //错误  结果类型一个是doublefloat a2 = a + 1.1F;  //结果类型一个是floatdouble 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; //正确//如果低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值char c='c';  int i=c; System.out.println("output:"+i);  //输出:output:99; //对于 byte、short 和 char 三种类型而言,他们是平级的,因此不能相互自动转换,可以使用强制类型转换byte i=99 ;  
short s=(short)i; 
char c=(char)i;}

强制类型转换

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

 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; //正确}

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

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

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

包装类型与基本类型的转换

使用包装类的构造函数将基本类型的变量手动装箱为相应的包装类

Boolean(boolean value)、 Character(char value)、 Integer(int value)、 Long(long value)、 Float(float value)、 Double(double value)

如:

int i =2 ;
Integer m = new Integer(5);

使用的包装类静态方法 valueOf() 将基本类型的变量手动装箱为相应的包装类

Integer i = Integer.valueOf(1);     // 手动装箱

valueOf() 内部是用的 new 方法来构造对象的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mtqc5ADP-1688095389534)(typora-user-images/image-20230328175013390.png)]

调用包装类中 ××Value() 的实例方法将包装类型手动拆箱为任意类型的简单类型数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h24531BM-1688095389535)(typora-user-images/8f77f382915f4df38e13a47c2b35b339.png)]

利用这种方法,也可以实现不同数值型变量间的转换,例如,对于一个双精度实型类,intValue() 可以得到其对应的整型变量,而 doubleValue() 可以得到其对应的双精度实型变量。

自动装箱和拆箱

在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了。
1)自动装箱:把基本类型转换成包装类,使其具有对象的性质,又可分为手动装箱和自动装箱

自动装箱实际上自动调用了valueOf();
int i = 10;//定义一个int基本类型值
Integer x = new Integer(i);//手动装箱
Integer y = i;//自动装箱

自动拆箱:和装箱相反,把包装类对象转换成基本类型的值,又可分为手动拆箱和自动拆箱

Integer j = new Integer(8);

其他类型转换

包装类型向字符串的转换

 String str = "11.1";Double d = new Float("11.1");     String str1 = d.toString();

字符串向包装类型的转换

 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的方法

引用数据类型

类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 对象的引用。

接口interface引用

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

数组引用

数组:存储在一个连续的内存块中的相同数据类型(引用数据类型)的元素集合。
数组中的每一个数据称之为数组元素,数组中的元素以索引来表示其存放的位置,索引(下标)从0开始。


http://www.ppmy.cn/news/663305.html

相关文章

台式选购

# 人工智能偏视觉方向的台式配置指南 &#xff08;仅供参考&#xff09; 我的配置 CPU &#xff1a;Intel i7-9700k&#xff1b;主板&#xff1a;华硕z370-PLUS GAMING 二代&#xff1b;电源&#xff1a; 美商金牌650w 全模组&#xff1b;显卡 &#xff1a;七彩虹 IGame GeF…

rtx2060为什么叫智商卡_老电脑升级RTX2060,——性能,功耗,静音都一步到位!...

这次升级,还是有点故事的,之前一直使用GTX1050Ti 4G 显卡,这卡真的是智商检测卡,不过那会儿正直矿卡巅峰,稍微好点的卡都被矿工掳走了,现在倒是矿难了,但是玩淘汰的矿卡也是各种坑!所以,为了避免被坑,还是老老实实的跟了 黄总走,买新出的RTX20x0系列,就是太贵了!!…

2019-9-10装机配置

我这里是写下自己的装机配置&#xff0c;可能有很多不合理的地方&#xff0c;但是各位就借鉴一下吧&#xff0c; CPU我选择是R5 2600X&#xff0c;首先为什么选这个&#xff0c;主要的原因是因为预算不足&#xff0c;心疼钱&#xff0c;本来想的是R5 3600&#xff0c;或者是R7…

【程序员面试金典】面试题 17.20. 连续中值

【程序员面试金典】面试题 17.20. 连续中值 题目描述解题思路 题目描述 描述&#xff1a;随机产生数字并传递给一个方法。你能否完成这个方法&#xff0c;在每次产生新值时&#xff0c;寻找当前所有值的中间值&#xff08;中位数&#xff09;并保存。 中位数是有序列表中间的…

【深度学习001】深度学习工作站组装—硬件篇—预算2万(20190401)

目录 1. 显卡的选择2. CPU的选择3. 主板的选择4.内存4.电源&#xff0c;机箱&#xff0c;散热5.总花费为&#xff1a;2万左右 一直想搭建一个自己的机器学习工作电脑&#xff0c;不过由于资金不够&#xff0c;一直没能如愿&#xff0c;前几日&#xff0c;咬咬牙自己攒了一台。花…

深度学习装机记录

文章目录 一、主机配件二、组装步骤1.在主板上安装CPU2.在主板上安装内存条3.在主板上安装固态硬盘4.在主板上安装CPU的散热风扇5.将主板放入机箱&#xff0c;上好螺丝6.安装显卡7.在机箱中安装机械硬盘和电源8.在机箱中安装机械硬盘和电源9.布线(参照主板说明书和机箱说明书)1…

基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

【uniapp开发小程序】点击获取手机号(使用@getphonenumber)

一、实现效果 二、代码实现&#xff1a; <template><view><view class"shopadd" v-if"info.mobile">{{info.mobile}}</view><button class"getNumber" v-else open-type"getPhoneNumber" getphonenumber…