前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 认识基本数据类型

Java 认识基本数据类型

原创
作者头像
二次员
修改2019-10-08 11:17:10
5710
修改2019-10-08 11:17:10
举报
文章被收录于专栏:Java小白入门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

代码语言:txt
复制
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

代码语言:txt
复制
 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了
此时的“120” 并非字节型byte 而是整型int了

强制类型转换

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

代码语言:txt
复制
  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  若要赋值 如下程序
此处int所赋值“120”在byte的有效范围内 但也不可把int赋值于byte 若要赋值 如下程序
代码语言:txt
复制
  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的有效范围内 若大的数据类型所赋值超出了小的数据类型的有效范围 那强制转换后的值又如何表示呢?

代码语言:txt
复制
  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以此类推
byte的有效范围为-128~127 当128强行赋值到byte时 大于范围的部分就开始了新一轮的读值 i1超了一位 取值即为byte有效范围的第一位 即-128 i2 i3以此类推

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

代码语言:txt
复制
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 就好像一本字典 它有65536页 (0~65535)每页都存了相应的字符 其中前128页(0~127)和ASCLL相一致 代码中c4超出了char的有效范围 超出部分为65 即为“A” 在char中运算 打印为char对应的字符 在System.out.println中运算 为对应的“页码”
此表与char的前128位相对应
此表与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里)

代码语言:txt
复制
public class Bl{
	public static void main(String[] args){
		int sal=1000000000;
		long result=(long)sal*12;//
		System.out.println(result*12);
	}
}

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本数据类型
    • 数值型
      • 浮点型
        • 字符型
          • 布尔型
          • 数据类型的转换
            • 自动类型提升
              • 强制类型转换
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档