MacOS-JAVA开发3-数据类型

MacOs-JAVA开发3-数据类型

整数类型

byte short int long

Java各整数类型有固定的表数范围和字段长度,不受具体操作系统的影响,以保证java程序的可移植性。

Java语言整型常量的三种表示形式:十进制整数、八进制整数、十六进制整数。

java语言的整型常量默认是int型

类型占用空间表数范围
byte1字节-128~127
short2字节-32768~32767
int4字节-2147483648~2147483647
long8字节-2的63次方~2的63次方-1

浮点型

float double

与整数类型类似有固定的表数范围和字段长度,不受具体操作系统的影响

float4字节-3.403E38~3.403E38
double8字节-1.798E308~1.798E308

字符类型

char ——存单引号引起来的文字 ‘1’ ‘100’ ‘a’ ‘A’

  • 计算机识别char类型的文字,需要用ASCII编码表,此编码表可以让文字和计算机很好的交流

  • ASCII编码表就是将人类的文字和十进制数字进行对应组成一张表格

  • 重点!!!——考点!!!
  • ‘0’—— 48

  • ‘a’—— 97

  • ‘A’—— 65

    编码史
    * ISO-8859-1(Latin-1),国际化标准组织ISO规定的,支持西欧语言,它不支持中文,向上兼容了ASCII码表
     * GBK2312/GBK/GBK18030,计算机开始向亚洲发展,中文(简体),韩文,日文等
     * 大五码<big5>:中文(繁体)
     * 最后,出现了全球文字的编码,unicode编码,它有多种体现:UTF-8,UTF-16,UTF-32
     * Java语言的源代码采用的是unicode编码
     
     char d = '我';//一个中文汉字占2个字节,char也是占2个字节
     System.out.print('\n');//\n表示换行符号
     System.out.print('\t');//\t缩进Tab
    

布尔型

true false

boolean适用于逻辑运算符,一般用于流程控制语句。

boolean类型数据只允许取true(1)或false(0).

基本数据类型的转换

(除了boolean类型其他7种类型类型都可以转换!!!)

  • byte 1 short 2 int 4 long 8
  • float 4 double 8 char 2

1.自动类型转换:小容量向大容量转换

规则:byte<short(char)<int<long<float<double

注意*

在基本数据类型自动转换上,整型永远小于浮点型,不论字节空间大小是多少

2.强制类型转换:大容量向小容量的转换——不建议经常使用的!!!

需要加上强制类型转换符,程序才能编译通过,但是运行阶段会出现一些问题

public class DataTypeTest03 {
	public static void main(String[] args) {
		//1.自动类型转换
		byte a = 1;
		int b = a;
		System.out.println(b);//1
		
		//2.=右边的数据没有提前声明是什么类型,如果是整数,默认是int类型,如果是小数,默认是double
		/*
		 * 笔试题:以下选项的代码哪一个书写有误?
		 * 第25行代码涉及到了基本数据类型的自动转换
		 * 第26行代码标准的long类型变量的声明和初始化
		 */
		long c = 100;//把一个int类型的整数100赋值给long类型变量c——基本数据类型的自动转换
		long d = 100L;//把一个long类型的整数100赋值给long类型变量c——标准的long类型变量的声明和初始化		
		//3.强制类型转换
		long x = 100L;
		int y = (int)x;//加强制类型转换符
		
		int i = 156;
		byte j = (byte)i;
		
		//4.笔试题:以下选项的代码哪一个书写有误?
		/*
		 * int类型的数据直接赋值给byte,short,char类型的变量,如果值没有超出
		 * byte,short,char的取值范围,就是可以直接赋值的,不用强制类型转换
		 */
		byte k = 127;//把一个int类型的整数127赋值给byte类型的变量k,值没有超出byte范围是可以直接赋值的
		byte k1 = (byte)128;//byte -128~127,128已经超出byte范围,就不能直接赋值,需要强制类型转换		
		//5.整型和浮点型的转换
		double n = 2.56;
		int m = (int)n;
		System.out.println(m);//2
		
		//6.强转存在的问题——数据溢出
		//所以当int类型向short、byte类型强制类型转换时出现一些莫名其妙的值时
		int o = 703;
		byte b2 = (byte)o;
		System.out.println(b2);//-65
	}
}

数据溢出
当数据类型进行强制类型转换时,超出了数据表示范围就会出现数据溢出。比如:

        int i = 703;
        byte b = (byte)i;
        System.out.println(b);

打印结果为-65  。

正确的解析过程应该是,703二进制表示应该是1010111111(由于i是int32位,所以前面应该很多个0凑集32位),但是byte只有8位容量,最终b=10111111(最左边的两位10被截取了)。 10111111直接转换成十进制是191,并不是-65  .那这个65  又是怎么得到的呢?

计算机的最高为是符号位,0表示正数,1表示负数。当为负数时,转换成十进制需要遵循这样一个规则。

1、首先按位取反,最高位符号位不需要转,10111111->11000000

2、再加1.11000001

3、最高位1表示负号-1000001转换为十进制为65.所以最终结果为-65

 

所以当int类型向shortbyte类型强制类型转换时出现一些莫名其妙的值时,都可以运用以上的规则进行解析。

Char数据转换

在这里插入图片描述

public class Demo05 {
	
	
	
	public static void main(String[] args) {
	
		byte num1=50;
		
		byte num2=100;
		
		//把num1和num2的值取出来,把转成int类型,然后再相加,然后再赋值
		//int+int -> int
		int num3=num1+num2;
		
		System.out.println(num3);//150
		
		
		char ziFu='A';//计算机底层只有数字
		//底层会用一个数字来代表一个字符
		//65来代表字符A
		//一旦char进行了数学运算,就会把字符翻译成一个数字
		System.out.println(ziFu+0);
		
		
		//boolean能不能发生类型转换?
		//boolean不能强转的
		boolean b=true;
		//int m=int(true);  错误的
		
		//赋值操作   新的数据来了,旧的数据就覆盖了
		//只能存储一个数据
		b=false;
		
		
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹿鹿熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值