5-2. 整数类型

举报
数据分析与统计学之美 发表于 2021/09/28 18:00:10 2021/09/28
【摘要】 Java系列第五课

一、关于java语言当中的整数型:byte、short、int、1ong

在这里插入图片描述
1、Java语言当中的“整数型字面值”被默认都当做int类型来处理。要让这个整数型字面值”被当做1ong类型来处理的话,需要在整数型字面值”后面添加1/L,建议使用大写的L。

2、java语言当中的整数类型字面值有三种表示方式

  • 第一种方式:十进制【是一种缺省默认的方式,缺省表示前面什么都不写,八进制是0开始,十六进制是0x开始】
  • 第二种方式:八进制【在编写八进制整数型字面值的时候需要以0开始】
  • 第三种方式:十六进制【在编写十六进制整数型字面值的时候需要以0x开始】
public class Test {
    public static void main(String[] args) {
    		int a = 10;
    		int b = 010;
    		int c = 0x10;
    		System.out.println(a);
    		System.out.println(b);
    		System.out.println(c);
    }
}

结果是:在这里插入图片描述

二、关于整数类型中“类型转换问题”。(很重要的知识点)

不存在类型转换
自动类型转换
强制类型转换

1、不存在类型转换:字面值的数据类型 和 变量的数据类型 一致。

注:Java语言当中的“整数型字面值”被默认都当做int类型来处理。

public class Test {
    public static void main(String[] args) {
    		// 字面值10在Java中默认是int类型,
    		// 变量a也是int类型的变量
    		// 将int类型的数据   赋值给  int类型的变量
    		// 不存在类型转换
    		int a = 10;
    		System.out.println(a);
    }
}

结果是:在这里插入图片描述

2、自动类型转换:小容量 转换为 大容量。

注:Java语言当中的“整数型字面值”被默认都当做int类型来处理。

public class Test {
    public static void main(String[] args) {
    		// 字面值10在Java中默认是int类型,
    		// 变量a是long类型的变量
    		// 将int类型的“小容量”变量  赋值给  long类型的“大容量”变量
    		// 会发生“自动类型转换”
    		long a = 10;
    		System.out.println(a);
    }
}

结果是:
在这里插入图片描述
问题:假如说给出的值超出了int类型的取值范围,会出现什么情况呢?

public class Test {
    public static void main(String[] args) {
    		// 字面值2147483748在Java中默认是int类型,
    		// 但是该值超出int取值范围【-2147483648,2147483647】。
    		// 变量a是long类型的变量
    		// 这种赋值方法,会出现编译错误。
    		long a = 2147483648;
    		System.out.println(a);
    }
}

结果是:在这里插入图片描述
解决办法 :在这个过大整数值后面添加一个大写的L,即可。

public class Test {
    public static void main(String[] args) {
		// 在字面值2147483748后面添加一个L,
		// 2147483748L默认会被当作8个字节的long类型
		// 变量a属于long类型的变量
		// 因此,这种写法“不存在类型转换”。
		long a = 2147483748;
		System.out.println(a);
    }
}

结果是:在这里插入图片描述
记住:在java中写的“整数型字面值”都会被当作int类型来处理。而“字面值+L”类型的字面值,都会被当作8字节的long类型来处理。

3、强制类型转换:大容量 转换为 小容量。

注:Java语言当中的“整数型字面值”被默认都当做int类型来处理。

public class Test {
    public static void main(String[] args) {
    		// 在字面值100后面添加一个L,
    		// 100L默认会被当作8个字节的long类型数据
    		// 变量a属于long类型的变量
        //  long类型数据  赋值给   long类型的变量
    		// 因此,这种写法“不存在类型转换”。
    		long a = 100L;
		    // 将大容量变量a  赋值给  小容量变量b  
		// 会编译报错。
		// 此时需要使用“强制类型转换”
        int b = a;
		System.out.println(b);
    }
}

结果如下:在这里插入图片描述
解决办法 :使用强制类型转换,需要加“强制类型转换符”

public class Test {
    public static void main(String[] args) {
    		long a = 2147483648L;
    		// 将大容量变量a  赋值给  小容量变量b  
    		// 会编译报错。
    		// 此时需要使用“强制类型转换”
    		// 此时编译通过,但是精度会损失很严重。
    		int b = (int) a;
    		System.out.println(b);
    }
}

结果是:在这里插入图片描述
“强制类型转换”出现的问题:编译可以通过,但是会出现精度损失,这个损失会很严重。(只有long类型数据的字面值,超过int数据类型取值范围的时候,才会出现精度损失)

4、特殊情况:Sun公司对byte、short类型的优待政策

public class Test {
    public static void main(String[] args) {
    		// byte的取值范围:【-128,127】
    		// 12属于一个int类型的字面值数据,大容量
    		// a属于一个byte类型的变量,小容量
    		// 以下写法,属于大容量  转换为  小容量
    		// 假如不写强制类型转换,会不会编译出错呢?
    		byte a = 12;
    		System.out.println(a);
    }
}

结果: // 编译通过在这里插入图片描述
再看看下面一个例子:

public class Test {
    public static void main(String[] args) {
    		// byte的取值范围:【-128,127】
    		// 128属于一个int类型的字面值数据,大容量
    		// 128超出了byte类型的最大值
    		// 这样会不会报错呢?
    		byte a = 128;
    		System.out.println(a);
    }
}

结果是: // 编译出错
在这里插入图片描述
解决办法 :仍然是使用强制类型转换,需要加“强制类型转换符”。但是会出现“精度损失”。

public class Test {
    public static void main(String[] args) {
		// byte的取值范围:【-128,127】
		// 128属于一个int类型的字面值数据,大容量
		// 128超出了byte类型的最大值
		// 这样会不会报错呢?
		byte a = (byte) 128;
		System.out.println(a);
    }
}

结果是:
在这里插入图片描述
总结如下:
在这里插入图片描述
以上结论,对于int类型转换为short类型,同样适用。

public class Test {
    public static void main(String[] args) {
    		// short的取值范围:【-32768,32767】
    		// 32767属于int类型的字面值
    		// b属于short类型的变量
    		// 此种写法属于大容量  转换为  小容量
    		// 虽然是强制类型转换,但是不用写“强制类型转换符”
    		short b = 32767;
    		System.out.println(b);
    }
}

结果是:

在这里插入图片描述
当int类型字面值超过short变量值范围,会出现“精度损失”。

public class Test {
    public static void main(String[] args) {
		short b =(short) 32768;
		System.out.println(b);
    }
}

结果是:
在这里插入图片描述

5、补充一个关于上述知识点的“错误写法”。

// 以下写法会出现编译错误
int a = 100;
short b = a;
System.out.println(b);
// 但是如下写法又是没有问题
short b = 100;
System.out.println(100);

我们试验一下;

public class Test {
    public static void main(String[] args) {
    		int a = 100;
    		short b = a;
    		System.out.println(b);
    }
}

结果是: // 编译错误
在这里插入图片描述
出现上述错误的原因是什么呢?
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。