Java SE(一)之 数据类型(基本数据类型,引用数据类型)& 数据类型转换

前言

开局一张图:

在这里插入图片描述

基本数据类型

1.整数型,浮点型,字符型,布尔型

内置数据类型,分为四类八种

四类分别是整数型,浮点型,字符型,布尔型。

数据类型关键字描述范围
整数型byte8位有符号的,默认值为0-128(- 2 7 2^7 27)~ 127( 2 7 2^7 27-1)
整数型short16位有符号的,默认值为0- 2 15 2^{15} 215 ~ ( 2 15 2^{15} 215-1)
整数型int32位有符号的,默认值为0- 2 31 2^{31} 231 ~ ( 2 31 2^{31} 231-1)
整数型long64位有符号的,默认值为0L- 2 63 2^{63} 263 ~ ( 2 63 − 1 ) 2^{63}-1) 2631)
浮点型float单精度、32位,默认值为 0.0f-3.4e-38 ~ 3.4e+38)
浮点型double8位有符号的,默认值为0.0d-1.79e+308 ~ 1.79e+308
字符型char单一的 16 位 Unicode 字符,默认值为’u0000’0 ~ 65535
布尔型boolean表示一位的信息,默认值为false只有 true 和 false

注意long类型和float类型需要加L或F标识(小写大写均可)

long a = 999999L;
float b =2.3f;

2.整型存储(原码,反码,补码)

(1)原码

将最高位作为符号位(以0代表正,1代表负),其余各位代表数值本身的绝对值(以二进制表示)

+7的原码为: 00000111
-7的原码为:  10000111

(2)反码

一个数如果为正,则它的反码与原码相同;一个数如果为负,则符号位为1,其余各位是对原码取反。

+7的反码为: 00000111
-7的反码为:  11111000

(3)补码

—个数如果为正,则它的原码、反码、补码相同;一个数如果为负,则符号位为1,其余各位是对原码取反,然后整个数加1。

+7的补码为: 00000111
-7的补码为:  11111000+1=11111001

(4)补码转原码

已知一个数的补码,求原码的操作分两种情况:

(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码

(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。
(也可以先将补码二进制减去1,再对除了符号位的其余各个位取反)

(5)总结

  • 最高位为符号位,0表示正数,1表示负数
  • 正数的原码,反码和补码都一样,三码合一
  • 负数的反码:符号位保持不限,其他位取反
  • 负数的补码:补码 + 1
  • 0的反码和补码都是0
  • 计算机的运算的时候,都是将原码转成补码进行运算的

引用数据类型

简单记忆的角度,可以把基本数据类型(8种)以外的都可以看成引用数据类型,所以常见的class类,数组,字符串都是引用数据类型

下面来看一下两者的具体区别:

1.从内存角度分析

首先基本数据类型开辟的是栈内存,并且变量存储的是真实的数据

在这里插入图片描述

引用数据类型,开辟栈空间和堆空间,变量存储的是地址值,是使用了其他空间的数据

在这里插入图片描述

总结一下——从内存的角度去理解

  • 基本数据类型:数据是存储在自己的空间;
  • 引用数据类型:自己空间中存储的是地址值,引用数据类型有两块存储空间,一个在栈中,一个在堆中,栈中存放的是堆中的地址,如数组,字符串String。

2.从赋值传递的角度

对象、数组都是引用数据类型,使用new关键字创建出来的类型都是引用数据类型。所有引用类型的默认值都是null

在这里插入图片描述

一定要注意基本数据类型和引用数据类型的赋值,基本数据类型,赋的是真实值,所以赋值后不改变原来的值,但引用数据类型赋的是地址值,修改赋值后的,会影响原来的。

在方法值传递时:

方法在传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实参的值
方法在传递引用数据类型时,传递的是地址值,形参的改变,影响实参的值

public static void main(String[] args) {
	Student s1 = new Student("zhangsan",23);
	Student s2 = s1;
	
	s2.setAge(21);
	
	s1.show(); // show的功能是输出年龄和姓名
	s2.show();
}

运行结果发现,s1和s2的show一样

姓名:zhangsan 年龄:21
姓名:zhangsan 年龄:21

另外 数组赋值,字符串比较也是一样

在这里插入图片描述

数据类型转换

整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。

转换从低级到高级

byte,short,char—> int —> long—> float —> double

1.隐式(自动)类型转换

基本规则:

  • 取值范围小的,和取值范围大的进行运算,小的会提升为大的,再进行运算
  • byte,short,char 三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算
  • 转换前的数据类型的位数要低于转换后的数据类型
char c1='a';//定义一个char类型
int i1 = c1;//char自动类型转换为int
System.out.println("char自动类型转换为int后的值等于"+i1);

输出:

char自动类型转换为int后的值等于97

2.强制类型转换

条件是转换的数据类型必须是兼容的。

int i1 = 123;
byte b = (byte)i1;//强制类型转换为byte

参考链接:
https://www.bilibili.com/video/BV17F411T7Ao?p=131&share_source=copy_web&vd_source=fa075f0e5dab81ef7c98b9eb4c47d9a7
https://www.runoob.com/java/java-tutorial.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值