Java基本数据类型及源码简析

1.Java的基本数据类型总共有八种,按照不同的类型分为整数型:byte,short,int,long;浮点数型:float,double;字符型:char;布尔型:Boolean.

每种基本类型所占的储存空间的大小是固定不变的,这相对于其他大多数语言来说Java更具有移植性,其实基本类型是一种特殊的"引用"类型,详细解析可以参考Java编程思想PDF版下载地址 提取码:i6n4

类型大小最小值最大值默认值
byte1byte=8bit-1281270
short2byte=16bit-32768327670
int4byte=32bit-214748364821474836470
long8byte=64bit-2^632^63-10L
float4byte=32bit1.4E-453.4028235E380.0f
double8byte=64bit4.9E-3241.7976931348623157E3080.0d
char2byte=16bitUnicode 0Unicode 65535\u000
booleanfalse
void
		byte bmax = Byte.MAX_VALUE;
		byte bmin = Byte.MIN_VALUE;
		System.out.println("最大值:"+bmax+"最小值:"+bmin);//最大值:127最小值:-128
		short smax = Short.MAX_VALUE;
		short smin = Short.MIN_VALUE;
		System.out.println("最大值:"+smax+"最小值:"+smin);//最大值:32767最小值:-32768
		int imax = Integer.MAX_VALUE;
		int imin = Integer.MIN_VALUE;
		System.out.println("最大值:"+imax+"最小值:"+imin);//最大值:2147483647最小值:-2147483648
		long lmax = Long.MAX_VALUE;
		long lmin = Long.MIN_VALUE;
		System.out.println("最大值:"+lmax+"最小值:"+lmin);//最大值:9223372036854775807最小值:-9223372036854775808
		float fmax = Float.MAX_VALUE;
		float fmin = Float.MIN_VALUE;
		System.out.println("最大值:"+fmax+"最小值:"+fmin);//最大值:3.4028235E38最小值:1.4E-45
		double dmax = Double.MAX_VALUE;
		double dmin = Double.MIN_VALUE;
		System.out.println("最大值:"+dmax+"最小值:"+dmin);//最大值:1.7976931348623157E308最小值:4.9E-324

注解:
1.基本类型都有与之对应的包装类,使其可以在堆中创建一个非基本对象,用来表示对应的基本类型,来使用一系列方法.
2.boolean类型所占存储空间的大小没有明确指定,仅定义能够取字面值truefalse
3.char只能保存单个字符,用单引号括起来,char也可以存储一个数字,比如

char a = 97;//在使用时会把数字对照ASCII码表转换成字符
System.out.println(a);//打印结果为a(ascii表中97对应字符a)

值得注意的是ASCII表中只规定了数字0-127对应的字符,128-65535默认对应的字符通通都是?,其中常用的对应比如大小写字母,0-9数字如下:

ASCII码数字对应字符
48~570~9
65~90A~Z
97~122a~z

4.float浮点数类型属于单精度,对小数位运算不精确;double属于双精度对小数运算更精确(两者的运算都不精确),一般通过BigInteger和BigDecimal类来实现高精度计算.
5.char类型可以储存一个中文汉字,因为 Java 中使用的编码是 Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个 char 类型占 2 个字节(16 比特),所以放一个中文是没问题的。

1.基本类型的赋值运算

	public static void main(String[] args) {
/*----------------why???-------------*/
		byte a = 12;
		byte a1= a+1;//报错
		short b = 12;
		short b1 = b+1;//报错
		int c = 12;
		int c1 = c+1;
		long d = 12;
		long d1 = d+1;
		float e = 12.0;//错,右面是double类型,解决方案加F
		double f = 12.0;
		int x = a/5;
		System.out.println(x);//结果为2 int类型
		System.out.println(a/5.0); //结果为2.4(真实值),double类型
		/*说明计算结果的数据类型与最大类型一致*/
	}

1.byte,short,char三种比int小的整数可以用范围内的值直接赋值
2.整数字面值是int类型;浮点数的字面值是double类型
3.计算结果的数据类型,与最大类型一致
4.byte,short,char三种比int小的整数,运算时会先自动转换成int

1.2基本类型的类型转换
在这里插入图片描述

小类型到大类型自动转换(隐式)byte a =120;Int b=a;//直接转

大到小需要强制转换(显示)int x = 356;byte y=(byte) x;//强制转换可能造成数据损失

2.包装类 b

基本类型是创建一个并非"引用"的变量,直接储存"值"并置于堆栈中,更加高效.
但是基础数据类型好像只能用来赋值?
基于这个问题Java引用了将byte转为对象调用方法进行数据的操作–包装类

基本数据类型包装类
byteByte
shortShort
intInteger
floatFloat
doubleDouble
charCharacter
booleanBoolean
voidVoid

1.1常用方法

所有包装类都是继承于java.lang.Number类(Viod直接继承Object类)
api中number类的方法
各子类的特有方法可以查看API了解

1.2自动装箱和自动拆箱

自动装箱:基本类型–>包装类;目的是使用包装类中的功能

int a = 5;
Integer b = a;//底层自动执行了valueOf(),返回一个对应int值的Integer实例

自动拆箱:包装类–>基本类型;目的是拿到包装类的值做运算

Integer a = 5;
int b = a+1;//在进行运算时,底层对a自动执行了intValue()方法,转为int类型再运算

有一个需要注意的小细节:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象 。而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象。

    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
        //IntegerCache.low为-128,IntegerCache.high默认为127
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
    }

Integer自动装箱池的范围是-128~127
Byte,Short,Long范围是-128~127
Character范围是0~127
Float和Double没有自动装箱池

2.BigInteger和BigDecimal

BigDecimal工具类:常用来解决精确的浮点数运算。
BigInteger工具类:常用来解决超大的整数运算。

2.1.创建对象

BigDecimal.valueOf(2);

2.2.常用方法

add(BigDecimal bd): 做加法运算
substract(BigDecimal bd) : 做减法运算
multiply(BigDecimal bd) : 做乘法运算
divide(BigDecimal bd) : 做除法运算
divide(BigDecimal bd,保留位数,舍入方式):除不尽时使用
setScale(保留位数,舍入方式):同上
pow(int n):求数据的几次幂

实例:接收用户输入的两个数字,做运算

 public static void main(String[] args) {
              double a = new Scanner(System.in).nextDouble();
              double b = new Scanner(System.in).nextDouble();
              System.out.println(a+b);
              System.out.println(a-b);
              System.out.println(a*b);
              System.out.println(a/b);//不精确             
              System.out.println(===上面的除法不精确===);
              
              BigDecimal bd1 = BigDecimal.valueOf(a);
              BigDecimal bd2 = BigDecimal.valueOf(b);
              BigDecimal bd3;
              bd3=bd1.add(bd2);
              System.out.println(bd3.doubleValue());           
              bd3=bd1.subtract(bd2);
              System.out.println(bd3.doubleValue());
       		  bd3=bd1.multiply(bd2);
              System.out.println(bd3.doubleValue());
              //bd3=bd1.divide(bd2);//报错除不尽

              //保留位数和舍入方式
              bd3=bd1.divide(bd2,5,BigDecimal.ROUND_HALF_UP);
              bd3=bd3.setScale(2, BigDecimal.ROUND_HALF_UP);//保留两位
              System.out.println(bd3.doubleValue());        
       }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值