Java 基础-语法-数据类型

Java 基础-语法-数据类型

数据类型概述

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

数据存储的单位

image

计算机的基本存储单位是0和1(bit),又称作位或比特,它是最小的存储单位。一个0/1即是一位,8位等于一个字节,比如:00101011 = 8bit(位/比特) = 1B(Byte/字节)。

目前计算机都是二进制的,让它们计算单位,只有2的整数幂时才能非常方便计算机计算,因为电脑内部的电路工作有高电平和低电平两种状态.所以就用二进制来表示信号,(控制信号和数据),以便计算机识别。

而人习惯于使用10进制,所以存储器厂商们才用1000作进率。这样导致的后果就是实际容量要比标称容量少,不过这是合法的。1024是2的10次方,因为如果取大了,不接近10的整数次方,不方便人们计算;取小了,进率太低,单位要更多才能满足需求,所以取2的10次方正好。

基本数据类型

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

整型默认是int;浮点型默认是double。

八种数据类型

leix

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

在这里插入图片描述

整型

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

byte a = 100; 
short s = 1000; 
int a = 100000; 
long a = 100000L; 

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

浮点型

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

float f1 = 1.1f;
double d1 = 1.2;

  1. 声明 float 类型的数据的时候加 f 或者 F;
  2. double 类型的数据的有效位数 15~16;
  3. float 类型的数据有效位数是 6~7;

字符

char(字符型)

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

char name = 'a'

布尔类型

boolean(布尔类型)

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

包装类型

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

基本类型与包装类的区别

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

基本数据类型转换

容量类型排序

shujunleixing

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

byte,short,char之间不会互相转换,但是他们三者在计算时首先会转换为int类型。

自动类型转换

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

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

}

强制类型转换

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

 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。

其他类型转换

包装类型向字符串的转换
 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的方法

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

手动转换

基本数据类型 → 包装类:
通过对应包装类的构造方法实现,除了 Character 外,其他包装类都可以传入一个字符串参数构建包装类对象。
包装类 → 基本数据类型
通过包装类的实例方法 xxxValue() 实现; // xxx 表示包装类对应的基本数据类型

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

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

引用数据类型

类 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 开始。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值