小虾米闯荡java江湖:第四回向内存要空间,java数据类型

1. 类型是什么

所谓类型是指描述变量占据的空间大小。例如 byte类型 占据8bits空间

2.  知识补充-字节存储单位

描述字节大小的单位 计算机内部数据的最小单位是位 bit,也就是一根电线丝一次传输的电信号状态,我们用二进制数 0 或 1 来表示。如果把 8 根电线丝并排在一起,并行传输数据,则一次可以同时传输 8 种电信号状态,即 8 位二进制数(0 或 1)。在计算机中,把 8 位聚在一起的二进制数称为一个字节byte,即 1 字节(byte)= 8 位(bit)。  

 3. java类型分类

4. 基本数据类型

4.1 byte类型

 4.1.1 定义

byte类型为java基本数据类型中的最小类型。byte: 8 (bit)

 

/**
 * 测试byte类型最大、最小存储量
 */
public class ByteTest{
	public static void main(String[] args) {
		byte a = 120;
		System.out.println("byte的最小值:" + Byte.MIN_VALUE);
		System.out.println("byte的最大值:" + Byte.MAX_VALUE);
	}
}

4.1.2 存储

 

4.1.3 补充: 进制问题

 十进制: 由0,1,2,3,4,5,6,7,8,9十个数组成,逢十进一

二进制: 由0,1两个数组成,逢二进一

由0~9,A-F十六个数组成,逢十六进一

 4.1.4 十进制转二进制

 十进制转为二进制: 除2取余数

 

 二进制转化为十进制: 每一位值(0或1)x2n-1

4.2 short类型

4.2.1 定义

短整型(short): 占2个字节;short : 2 x 8 = 16 (bit)

/**
 * 测试short类型最大、最小存储量
 */
public class  ShortTest {
	public static void main(String[] args) {
		short a = 129;
		System.out.println("最小值:" + Short.MIN_VALUE);
		System.out.println("最大值:" + Short.MAX_VALUE);
	}
}

4.2.1 存储

最高位(第15位)0表示正数,1表示负数 

4.2.2 面试相关

以下代码是否有错误?

  • short s1= 1;

  • s1 = s1 + 1;

4.3 char类型

4.3.1 定义

字符型(char): 占2个字节; char: 2 x 8 = 16 (bit)

4.3.2 存储

char类型存储正数,最高位0,1都表示正数,存储范围: 0 ~65535

4.3.3 使用单引号描述char类型

 char ch = 'a';  //定义一个char类型ch, 存储字符 a

4.3.4 使用整数描述char类型

char ch = 97;  //定义一个char类型ch, 存储字符 a

4.3.5 使用unicode描述

char ch = ''\u0061';

4.3.6 知识补充-ASCII码Unicode

 1.  ASCII码

ASCII: American Standard Code for Information Interconnection(美国信息交换标准代码)

  • 用一个字节(8位)来表示一个英文字符

  • 字节的最高位统一规定位0

  • 剩下7个位置存储数据

  • 最大能表示128个字符(0~127数值)

2. unicode

 

 3. 编码类型

  • GB2312编码

    1981年5月1日发布的简体中文汉字编码国家标准。GB2312对汉字采用双字节编码,收录7445个图形字符,其中包括6763个汉字。

  • BIG码

    台湾地区繁体中文标准字符集,采用双字节编码,共收录13053个中文字,1984年实施。

  • GBK编码

    1995年12月发布的汉字编码国家标准,是对GB2312编码的扩充,对汉字采用双字节编码。GBK字符集共收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。

  • Unicode编码

    国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。Unicode采用四个字节为每个字符编码。

  • UTF-8和UTF-16编码

    Unicode编码的转换格式,可变长编码,相对于Unicode更节省空间。UTF-16的字节序有大尾序(big-endian)和小尾序(little-endian)之别。

4.4 int类型

4.4.1 定义

整型:占4个字节 int: 4 x 8=32 (bit)

/**
 * 测试int类型最大、最小存储量
 */ 
public class IntTest  {
	public static void main(String[] args) {
		int x = 333333;
		System.out.println("int的最小值:" + Integer.MIN_VALUE);
		System.out.println("int的最大值:" + Integer.MAX_VALUE);
	}
}

4.4.2 存储

最高位(第31位),0表示正数,1表示负数。

 

4.4.3 常量int类型

编译器默认整型常量(1, 11,333)为int类型

int x = 3; //编译器默认3为int类型

4.5 long类型

4.5.1 定义

长整型: 占8个字节 long: 8 x 8=32 (bit)  

/**
 * 测试long类型最大、最小存储量
 */
public class LongTest{
	public static void main(String[] args) {
		long x = 12345678910L;  //常量默认int
		System.out.println("long的最小值:" + Long.MIN_VALUE);
		System.out.println("long的最大值:" + Long.MAX_VALUE);
	}
}

4.5.2 存储

 

4.5.3 常量long类型

使用long类型常量要在常量末尾加L或l字母

final long size = 34L;

4.5.4 案例

注意运算过程中有可能超出类型的最大范围问题。

/**
 * 计算一个100岁的人一共活了多少秒
 */
public class HowManySeconds{

	public static void main(String[] args) {
		int age = 100; //岁
		int year = 365;  //天
		int day = 24;  //时
		int hour = 60;  //分
		int minus = 60;  //秒
		long total = 1L* age * year * day * hour * minus; //计算结果为int。使用1L升级为long型
		System.out.println("100年有: " + total +"秒");
	}
}

age * year * day * hour * minus;结果超出最大int的最大范围

编译器默认 1, 2,3333, in

4.6 float类型

4.6.1 定义

单精度: 占4个字节 float : 4 x 8=32 (bit)

4.6.2 常量的float类型

表示一个常量为float类型:

 4.6.3 知识补充-浮点类型的计算机表示

1. 单精度表示

 2. 双精度表示

4.7 double类型

4.7.1 定义

双精度: 占8个字节 double : 8 x 8=64 (bit)

 4.7.2 问题扩展

double x = 3.000000001;
double y = 3.0000000011;
比较x和y谁的值大?

     开发中不要使用浮点类型进行比较运算,结果可能出现问题

4.7.3 常量双精度

编译器默认带小数的类型为double类型;

1.1, 2.000 为double 型

double x  = 3.001;  // 常量3.001编译器默认为double类型

4.7.4 面试相关

  • 以下程序运行是否有问题?
  • 程序运行是否有问题?

       

4.8 boolean类型

4.8.1 定义

布尔型: 空间由不同的jvm定义

boolean  f = true; 

今天先到游荡这里了,预知后事如何,请关注:神奇的运算符。 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值