2021-06-21~2021-06-25总结(Java基础总结一:Java数据类型)

工作总结

工作内容

本周的工作内容跟上周类似,所以就不展开说了,今天就来浅谈一下Java的数据类型从头来回顾一下Java的基础知识。

技术探索

1.浅谈Java数据类型

Java是一门强类型的编程语言,它对变量的数据类型有严格的限定。在定义变量时必须声明变量的类型,在为变量赋值时必须赋予和变量同一种类型的值,否则程序会报错。在Java中变量的数据类型分为两种,即基本数据类型和引用数据类型。(基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的,不论是基本数据类型还是引用类型,他们都会先在栈中分配一块内存,对于基本类型来说,这块区域包含的是基本类型的内容;而对于引用类型来说,这块区域包含的是指向真正内容的指针,真正的内容被手动的分配在堆上。)
在这里插入图片描述

1.1 基本数据类型

Java的基本数据类型包括数值类型与非数值类型。(记住String不是基本数据类型)

  • 数值类型:byte、short、int、long
  • 非数值类型:char、long
基本数据类型存储:

例如

int a=10;
int b=10;
a=11;

编译器首先它会在栈中创建一个a变量的引用,然后查找有没有字面值为10的地址,如果没有找到,就开辟一个存放10这个字面值的地址,然后将a指向10的地址。接着处理int b = 10;在创建完b这个引用变量后,由于在栈中已经有3这个字面值,便将b直接指向10的地址。这样,就出现了a与b同时均指向10的情况。如果之后再次对a进行新的赋值,b的值不会发生改变,因为编译器内部会重新去查找是否存在11的字面值,如果没有会新开辟一个存储11字面值的地址,从而修改a引用所指向的地址。
在这里插入图片描述
(没有好的画图工具,大家有人可以推荐一下嘛)

基本信息:
数据类型描述占用字节取值范围默认值
int整型,用于存储整数4个字节-2147483648~21474836470
byteJava中最小的数据类型1个字节-128~1270
short短整型2个字节-32768~327170
long长整型8个字节-263~263-10L
float浮点型,用于存储带小数点的数字4个字节/0.0f
double双精度浮点型,用于存储带有小数点的数字8个字节/0.0d
char字符型,用于存储单个字符2个字节0~65535
boolean布尔类型,用于判断真或假1个字节仅有两个值,即true、falsefalse
基本类型之间的转换:

将一种类型的值赋值给另一种类型是很常见的。在Java中,boolean 类型与其他7中类型的数据都不能进行转换,这一点很明确。但对于其他7种数据类型,它们之间都可以进行转换,只是可能会存在精度损失或其他一些变化。转换分为自动转换和强制转换:

  • 自动转换(隐式):无需任何操作
  • 强制转换(显式):需使用转换操作符(type)。
    将6种数据类型按下面顺序排列一下:double > float > long > int > short > byte
    (如果从小转换到大,那么可以直接转换,而从大到小,或char 和其他6种数据类型转换,则必须使用强制转换)
  1. 自动转换
    自动转换时发生扩宽。因为较大的类型(如int)要保存较小的类型(如byte),内存总是足够的,不需要强制转换。如果将字面值保存到byte、short、char、long的时候,也会自动进行类型转换。注意区别,此时从int(没有带L的整型字面值为int)到byte/short/char也是自动完成的,虽然它们都比int小。在自动类型转化中,除了以下几种情况可能会导致精度损失以外,其他的转换都不能出现精度损失。
    (int–> float、long–> float、long–> double、float -->double)除了可能的精度损失外,自动转换不会出现任何运行时(run-time)异常。
  2. 强制类型转换
    如果要把大的转成小的,或者在short与char之间进行转换,就必须强制转换,也被称作缩小转换,因为必须显式地使数值更小以适应目标类型。强制转换采用转换操作符()。byte到char的过程其实是byte–>int–>char,所以widening和narrowing都有。强制转换除了可能的精度损失外,还可能使模(overall magnitude)发生变化。强制转换格式如下:(target-type) value;
    如果整数的值超出了byte所能表示的范围,结果将对byte类型的范围取余数。例如a=256超出了byte的[-128,127]的范围,所以将257除以byte的范围(256)取余数得到b=1;需要注意的是,当a=200时,此时除了256取余数应该为-56,而不是200。
    将浮点类型赋给整数类型的时候,会发生截尾。也就是把小数的部分去掉,只留下整数部分。此时如果整数超出目标类型范围,一样将对目标类型的范围取余数。
1.2引用数据类型

在Java中,引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,变量一旦声明后,类型就不能被改变了。Java中的引用类型共有三种,分别是类,数组,接口这些引用类型的默认值都是null

引用数据类型存储:

引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”(存储对象在内存堆上的地址)是存储在有序(先进后出)的内存栈上的,而对象本身的值存储在内存堆上的 ;
下周将对引用数类型进行一次比较详细的说明

1.3数据类型在代码中的存储情况
  1. 方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法中声明的变量就放在方法栈中当方法结束系统会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束。(这就局部变量只能在方法中有效的原因)
    在方法中声明的变量可以是基本类型的变量,也可以是引用类型的变量。
    (1)当声明是基本类型的变量的时,其变量名及值(变量名及值是两个概念)是放在方法栈中
    (2)当声明的是引用变量时,所声明的变量(该变量实际上是在方法中存储的是内存地址值)是放在方法的栈中该变量所指向的对象是放在堆类存中的。
  2. 在类中声明的变量是成员变量,也叫全局变量,放在堆中的,全局变量不会随着某个方法执行结束而销毁。
    在类中声明的变量即可是基本类型的变量 也可是引用类型的变量
    (1)当声明的是基本类型的变量其变量名及其值放在堆内存中的。
    (2)引用类型时,其声明的变量仍然会存储一个内存地址值,该内存地址值指向所引用的对象。引用变量名和对应的对象仍然存储在相应的堆中

总结

1、对于变量的存储有了进一步的认识,但是不够感觉还有一些地方没有通。后续再写的时候应该要加深理解。
2、后续整体的回顾一遍Java的基础知识,为之后的学习做铺垫。

且走且进,切勿急功--zwx
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值