Java 认识基本数据类型

基本数据类型


基本的数据类型有四类八种

java 的变量就好像奶茶杯子,有焦糖奶茶,乌龙奶茶,脏脏茶。有小杯,中杯,大杯,超大杯,霸霸杯。每一种杯子都会装载Java的变量,比如点奶茶我会说 "我要大杯的焦糖奶茶 ” ,我们就这样告诉编译器 “ 请给我一个byte变量保存值为70”。当然你还要给这个变量一个名字,就好像店员贴上代表你订单的标签,这样就不会把和你点一样奶茶的其他顾客和你搞错了。

数值型

名称

表示代码

有效范围

存储

字节型

byte

-128 ~ 127

单字节

8bit

短整型

short

-32768 ~ 32767

二字节

16bit

整型

int

-2147483648 ~ 2147483647(±21亿)

四字节

32bit

长整型

long

±9.28*10^18(默认为int 赋值大于int时在值后加L)

八字节

64bit

public class Shu{
  public static void main(String[] args){
     long = 10000000L;//long在赋值时默认类型为int 当值大于int的有效范围时在所赋值后加L 
  }
}

电脑是以二进制存储以及发送接收数据的。二进制的一位,就叫做 1 bit。也就是说 bit 的含义就是二进制数中的一个数位,即 “0” 或者 "1"。Byte 是字节的英文写法。它的简写为大写字母 “B"。英文字符通常是一个字节,也就是 1B,中文字符通常是两个字节,也就是 2B。字节 Byte 和比特 bit 的换算关系是 1 Byte = 8 bit 。

浮点型

名称

表示代码

有效范围

精度

存储

单精度

float

±3.4*10^38

24位(约7位十进制数字 赋值时在值后加F)

四字节

32bit

双精度

double

±1.7*10^308

53位(约16位十进制数字)

八字节

64bit

float 和 double 并不能精确的表示十进制的小数。简单的说自然数都是由“1”累加而成,此时十进制和二进制都可以无限制累加,就如两个半径不同的同心圆,从圆心放射一条直线在两个圆上都能找到一一对应的点。小数就不同,小数和分数一样都是用来表示不是完整的“1”的部分,简单的说十进制可以把“1”分为10份每份为“0.1”,同理“0.1”也可继续分成10份,而二进制只能把“1”分为两份,未能分割的部分自然不能精确表示了。

字符型

名称

表示代码

有效范围

存储

字符型

char

' '中包裹一个字符

0~65535的整数

二字节

16bit

布尔型

名称

表示代码

表现形式

存储

布尔

boolean

true , false

1bit

数据类型的转换


数据类型的转换分为两种,自动类型提升和强制类型转换 boolean类型不参与类型转换

自动类型提升

小范围类型的数据到大范围类型会发生自动类型提升(指有效范围)

其顺序由小到大为 byte short chart int long float double

 public class Zdlxzh{
    // 公共的 静态的 无类型 主要 (字符串[] 参数)
    public static void main(String[] args){
      //字节型 命名为b 赋值120
        byte b=120;
      //整型 命名为i 把b的值赋予i (赋值的顺序是自右向左的)
	    int i=b;
      //系统 输出 打印换行(即打印i的值并光标换行)
	    System.out.println(getType(i));
    } 
}
此时的“120” 并非字节型byte 而是整型int了

强制类型转换

大范围类型的数据赋值给小范围类型的变量,在编译时会报错,如果需要赋值,就要强制类型转换,此过程中所赋值可能会损失精度。

  public class 	Qzlxts{
    // 公共的 静态的 无类型 主要 (字符串[] 参数)
    public static void main(String[] args){
      //整型 命名为i 赋值120
        int i=120;
      //字节型 命名为b 把i的值赋予i (赋值的顺序是自右向左的)
	byte b=i;
      //系统 输出 打印换行(即打印b的值并光标换行)
	System.out.println(b);
     } 
  }
此处int所赋值“120”在byte的有效范围内 但也不可把int赋值于byte 若要赋值 如下程序
  public class 	Qzlxts{
    // 公共的 静态的 无类型 主要 (字符串[] 参数)
    public static void main(String[] args){
      //整型 命名为i 赋值120
        int i=120;
      //字节型 命名为b 把i的值赋予i (赋值的顺序是自右向左的)
	byte b= (byte)i;//小的数据类型 命名=(所要转换的数据类型)大的数据类型
      //系统 输出 打印换行(即打印b的值并光标换行)
	ystem.out.println(b);
     } 
  }

看到此处读者或有疑问,此时int所赋值的范围在byte的有效范围内 若大的数据类型所赋值超出了小的数据类型的有效范围 那强制转换后的值又如何表示呢?

  public class 	Qzlxts{
    public static void main(String[] args){
                int i1=128;
		int i2=129;
		int i3=130;
		byte b1=(byte)i1;
		byte b2=(byte)i2;
		byte b3=(byte)i3;
		System.out.println(b1);
		System.out.println(b2);
		System.out.println(b3);
		
		int i4=65600;
		char c1=(char)i4;
		System.out.println(c1);
    } 
}
byte的有效范围为-128~127 当128强行赋值到byte时 大于范围的部分就开始了新一轮的读值 i1超了一位 取值即为byte有效范围的第一位 即-128 i2 i3以此类推

char 打印的结果为什么为@我们再新的程序中进行详解

public class Char65535{
     public static void main(String[] args){
        char c1='A';
	char c2=65;
        char c3='A'+32;
         System.out.println(c1);
         System.out.println(c2);
         System.out.println(c3);
         System.out.println(c1+32);
        int i=65601;
        char c4=(char)i;
         System.out.println(c4);
        char c5='中';	
	 System.out.println(c5);				
     }
}
char 就好像一本字典 它有65536页 (0~65535)每页都存了相应的字符 其中前128页(0~127)和ASCLL相一致 代码中c4超出了char的有效范围 超出部分为65 即为“A” 在char中运算 打印为char对应的字符 在System.out.println中运算 为对应的“页码”
此表与char的前128位相对应

示例: char m='a';  ——a char m='a'+1;  ——b 提升为int,计算结果98对应的字符是b。 char m='中'+'国';  ——42282 char m='中'+'国'+'国'+'国';  ——报错 int转char有损失。因为结果已经超出char类型的范围。 char m='中'+1;  ——丮 1是int,结果提升为int,输出对应的字符。

在使用中我们或许还会遇到一种情况 我们的变量在进行运算时 超出了原有数据类型的有效范围 解决这种情况我们可以进行如下操作

假设有那么一天 二次员的月收入达到了1个亿(希望有那么一天 虽然那是王健林的小目标)那么计算我的年薪时数据就会超出int的有效范围 (当然我们一开始就可以用把一亿存在long里)

public class Bl{
	public static void main(String[] args){
		int sal=1000000000;
		long result=(long)sal*12;//
		System.out.println(result*12);
	}
}

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏鲜枣课堂

人工智能到底是个什么鬼? | 推荐

说起人工智能,大家想到的都是各种科幻电影、漫画中各种像人一样有自我意识、能思考复杂问题的机器人。它们除了没有血肉之躯,不容易感情用事,记忆力和计算能力特别出色...

17630
来自专栏Java后端技术栈cwnait

Spring创建bean的三种方式

Spring主要从两个角度来实现自动化装配:①组件扫描;②自动装配。组件扫描指的是Spring会自动扫描指定包及其子包下的所有bean,并将其放入s...

33510
来自专栏AI研习社

TensorNetwork,一个能够提高张量计算效率的开源库

世界上许多最棘手的科学挑战,如开发高温超导体和了解空间和时间的本质,都涉及到处理量子系统的复杂性。使这些挑战变得困难的原因是这些系统中的量子态数量呈指数级增长,...

9020
来自专栏Java3y

记一次愚蠢的操作--String不可变性

我这边有一个系统,提供一个RPC接口去发送短信。外部调用我的接口需要传入手机号等等参数,我这边负责解析这些参数、做一些业务的处理,然后调用短信渠道商的接口发送短...

9430
来自专栏CDN及云技术分享

git问题场景和log颜色查看

正常我们使用git,比如git add ,git commit , git push这些完成个人的代码暂存、修改、提交和推送操作。

877390
来自专栏Java系列文章

HashMap源码分析(二):看完彻底了解HashMap

HashMap在上一篇源码分析的文章中,如果使用put的时候如果元素数量超过threshold就会调用resize进行扩容

9310
来自专栏机器学习算法与Python学习

24 个让 Python 加速的好方法!

21020
来自专栏挨踢小子部落阁

Java数据结构-ArrayList最细致的解析笔记

ArrayList是一个类,这个类有一个数组参数elementData,ArrayList集合中的元素正是保存在这个数组中,它继承了数组查询的高性能,参考第3篇...

15610
来自专栏达达前端

【一起来烧脑】一步Sass学会体系

Sass 导入SASS文件 Sass的@import规则在生成css文件时就把相关文件导入进来

7810
来自专栏鲜枣课堂

一文看懂LTE的鉴权

所谓鉴权,就是鉴别终端或网络的真伪,保证通信数据的安全(不被截取、不被篡改、不被伪造)。

18730

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励