java基础(二)基本数据类型

一、数据类型(定义变量)

        数据类型指的是数据在内存当中的存取形式,目前主流的设计语言分为两大种形式,分别为强数据类型语言和弱数据类型语言。

1、数据的存储形式

        数据的类型分为两种,分别是基本数据类型,和引用数据类型。

        例:

        整形与浮点型各种类型大小

        整形和浮点型数据存储方式

        对于强类型语言,在考虑一个数据时,必须考虑数据的数据大小与数据形式,以存取在内存当中。对于弱类型语言,只需要考虑数据存储而不需要考虑数据在内存当中如何去设计。

2、基本数据类型:包括整形( byte、short 、int 、long),浮点型( float、 double),布尔类型( boolean),字符类型(char)。

二、计算机对整形数据的存储方式

1、二进制转换(十进制转二进制)

        ①除余法(除2取余,从下往上数)

        ②分解法(分解转换的数与2的次数相对应,从右往左数)

2、源码

        数据的源码:数据直接转换成对应的二进制形式,然后根据数据类型进行补充,其中正数最高位0,负数最高位是1

        例:

        byte是基本数据类型,数据类型决定数据在内存当中如何存储,byte大小是8bit(1字节) 1bit符号位 7bit代表数值位。

        byte a = 10;: 00001010 (源码)

        byte b = -10; 10001010 (源码)

3、反码

        正数的反码 = 源码

        负数的反码 = 源码的符号位不变,其余按位取反

        例:

        a:反码: 00001010 (反码)

        b:反码: 11110101 (反码)

4、补码

        正数的补码 = 反码 = 源码

        负数的补码 = 在反码的基础上末尾+1

        例:

        a:补码: 00001010 (补码)

        b:补码: 11110110 (补码)

5、计算机当中存储数值类型数据使用的是补码的形式。

        原因:①计算机存储数值类型的数据不能是存储源码,因为源码的相反数相加不是0;

                ②计算机存储数值类型的数据不能是存储反码,因为反码存在+-0的问题;

                ③虽然用补码计算,有时会超出数据的原有的数据位数,但是因为数据类型规定了数据在内存当中的存储大小,此时截取数据即可。

        例:运算:a + b (二进制在进行加减运算的时候,符号位也参与运算)

        byte a = 10;: 00001010 (源码)

        byte b = -10; 10001010 (源码)

        ①源码运算

        ②反码运算

        a:反码: 00001010 (反码)

        b:反码: 11110101 (反码)

③补码运算

        a:补码: 00001010 (补码)

        b:补码: 11110110 (补码)

6、数据运算特殊题型

        byte a = 127;

        byte b =1;

        二者相加却为-128(byte类型)代码如下:

public static void main(String[] args){
       byte a=127;
       byte b=1;
       byte c =(byte) (a+b);
       System.out.println(c);
 }

        运行该代码所得结果为-128

        原因:byte类型的范围是 -128~127,如果此时127+1还在byte类型的表示范围内(计算机中整数以二进制的形式进行存储,当最高位为1时为负数,为0时为正数,而在二进制加法中,正数的源码,反码,补码值相同。127(二进制0111 1111)加上1(0000 0001)相加为1000 0000这恰好是-128的二进制表示形式), 此时值应为-128。

三、浮点型数据

        浮点型包括float(单精度)和double(双精度)计算机存储小数默认用double类型。

1、小数转化为二进制数,乘二取整(从下往上读,0.2在二进制中是一个无限循环数)

        例:

2、精度丢失问题

        原因:计算机存储小数默认用double类型,而double数据类型大小固定,而有些书为无限循环数、所以数据会被进行裁剪,因为裁剪而有些数据无法进行完整度的表述,产生精度丢失问题。

        例:结果为0.199999.........

public static void main(String[] args){
   System.out.println(1.2-1);
   
}

        解决办法:跟精度强相关,在Java中用BigDecimal类解决

public static void main(String[] args){
    BigDecimal b1=new BigDecimal(Double.toString(1.2));
    BigDecimal b2=new BigDecimal(Double.toString(1));
    Double value =b1.subtract(b2).doubleValue();
    System.out.println(value);
}

四、char类型

1.字符类型实际上是一个16位无符号整数,这个数对应字符的编码

2.java字符类型采用Unicode字符集编码。Unicode是世界通用的定字长字符集,所用字符都是16位

public static void main(String[] args) {
		char c1 = '中';
		char c2 = '\u4e2d';
		System.out.println(c1);
		System.out.println(c2);
	}

注释:’4e2d‘为’中‘所对应的16位Unicode编码

3.任何一个字符都可以转化为一个整数,整数的范围是0-65535

public static void main(String[] args) {
		int  a = '中';
		System.out.println(a);
	}

4.可以查看某个数对应着那个字符

public static void main(String[] args) {
		char c = 69;
		System.out.println(c);
  }

        输出:E

5、转义字符

        对于不方便输出的字符可以采用转义字符表示:

        例如:

public static void main(String[] args) {
		int num = 100;
		String json = "{"+"\"count\":"+num+"}";// /斜杠 \反斜杠
  		String dataString = "[{\"id\":\"1\" ,\"name\":\"张三\"},{\"id\":\"2\" ,\"name\":\"李四\"},{\"id\":\"3\" ,\"name\":\"王五\"}]";
		System.out.println(json);
}

        输出:{"count":100}

五、布尔类型

        boolean(布尔)类型有两个值:flase和true,用来判断逻辑条件。数值型和boolean之间不能直接转化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值