java快速入门知识整理:6、java数据类型:整型、直接量(字面量)、8和16进制表示形式(2022-08-25-2839更新完成)

575 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第28天,点击查看活动详情

文章目录

一、整数类型简单介绍

Java的整数类型有哪些

二、整型代码演示说明

Java怎么表示整数类型

Java整数类型的运用

三、直接量(字面量)

直接量、8和16进制表示形式、int最大值和最小值


一、整数类型简单介绍

Java的整数类型有哪些

Java整数类型用来存储整数数值,即没有小数部分的数值,可以是正数、负数,也可以是零。根据所占内存的大小不同,可以分为byte、short、int和long 4种类型。

1.byte型。使用byte关键字来定义byte型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。

2.short型。short型即短整型,使用short关键字来定义short型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。

3.int型。int型即整型,使用int关键字来定义int型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。

4.long型。long型即长整型,使用long关键字来定义long型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。

二、整型代码演示说明

Java怎么表示整数类型

整数类型在Java程序中有3种表示形式,分别为十进制表示法、八进制表示法和十六进制表示法。

1、十进制表示法。十进制的表现形式大家都很熟悉,即逢十进一,每位上的数字最大是9,如120、0、-127都是十进制数。

2、八进制表示法。八进制即逢八进一,每位上的数字最大是7,且必须以0开头。例如,0123(转换成十进制数为83)、-0123(转换成十进制数为-83)都是八进制数。

3、十六进制表示法。中国古代使用的就是十六进制数,所谓半斤八两就是如此,逢十六进一,每位上最大数字是f(15),且必须以0X或0x开头。

例如,0x25(转换成十进制数为37)、0Xb01e(转换成十进制数为45086)都是十六进制数。

Java整数类型的运用

通常所说的整型指的是byte、short、int和long。

int是最常用的整型,因此在通常情况下,一个整数值默认为int类型,有如下两种情形例外:

(1)如果直接将一个较小的整数值(在byte或short类型的数值范围内)赋给一个byte或short的存储区,系统就会自动把这个整数值当成byte或short类型来处理。

(2)即使一个整数值超出了int类型的数值范围,系统也不会自动把这个整数值当成long类型来处理。如果希望系统把一个整数值当成long类型来处理,就在这个整数值后增加1(小写字母)或L(大写字母)作为后缀。为了避免英文字母1与数字1混淆,推荐使用L。

package t05_整型;

/**
 * 整数类型:byte  short  int  long
 */
public class TestZX {
	public static void main(String[] args) {
		
//		testByte();
//		testShort();
//		testInt();
		testLong();
	
	}
	
	/**
	 * long类型
	 * 1)为整数类型,8字节,64位,存储长整数(常用)
	 * 2)范围:-2的63次方  ~  2的63次方 -1
	 * 3)如果要表示long直接量,需要以 L 或 l 结尾
	 */
	private static void testLong() {
		
		//Java 中整数字面量(直接量)默认都是int类型
		//不加 L或 l,说明是int类型,这样超出int范围了。
		//long l = 2147483648; //编译错误,直接量超出 int范围了
		long l = 2147483648L;//以L后缀的是long类型字面量
		
		//获取计算机系统时间, 从1970年到现在的毫秒数
		long now = System.currentTimeMillis();
		System.out.println(now);
		
		//将毫秒数转化为当前年
		long year = now/1000/60/60/24/365 + 1970;
		System.out.println(year);
		
		long max = 0x7fffffffffffffffL;//long时间耗尽的时刻!
		year = max/1000/60/60/24/365 + 1970;
		System.out.println(year);
		
	}

	
	/**
	 * int类型
	 * 1)为整数类型,4字节,32位,存储整数(常用)
	 * 2)范围:-2147483648~2147483647	
	 * 		 即-2的31次方  ~  2的31次方 -1 
	 * 3)Java 中整数字面量(直接量)默认都是int类型。
	 */
	private static void testInt() {
//		int类型
//		它是一个4个字节的整数,也是一个有符号的整数
//		它的取值范围:-2147483648~2147483647
		
		int i = 5;		
//		i= 2147483648;//编译错误,直接量超出int范围了
		
	}

	/**
	 * short类型
	 */
	private static void testShort() {
//		short类型
//		它是一个有符号的2个字节的整数,也就是16位的整数。
//		它的取值范围是 -32768~32767,
//		byte类型的取值范围是: -128到127
//		所以byte类型可以直接赋给short类型,
//		反之则不可以,short类型赋给byte类型,
//		同样需要进行强制类型转换。
	}

	/**
	 * byte类型
	 */
	private static void testByte() {
		byte b=3;
//		b= b*3;//编译错误
		b=(byte) (b*3);
		System.out.println(b);//9
//		java提供的 byte字节类型,它是1个字节的,是一个有符号的,8位的整数,
//		也就是说我们定义的 b这个变量,它可以存放负数。
		
//		我们在 C语言当中,当我们定义一个字节类型,通常表示的是无符号的整数。
//		那么我们要注意,在 java当中这个byte,是表示有符号的整数。
//		byte字节类型是一个有符号的整数,它的范围是: -128到127
//		我们可以给它赋值:b=3; 这个值是在它的取值范围之内的,
//		然后我们让 b=b*3,会出现编译错误,那么为什么呢?
		
//		当我们字节类型变量 b,它在参与运算的时候,java做了自动数据类型的提升,
//		为了保证运算的精度,将这个运算 b*3 的结果,转换成一个int类型了,
//		这时候你赋值给字节类型 b,那么int类型的取值范围 和 byte类型的取值范围 是不一样的,
//		所以会导致编译错误,这时候我们需要进行强制转换:b=(byte) (b*3);
	}
	
	
}

三、直接量(字面量)

直接量、8和16进制表示形式、int最大值和最小值

package t06_直接量;

/**
* 直接量:就是直接写出的数字(常量)
* 1) int i = 5; 中i是变量,而5是直接量(直接写出的数)
* 2) Java 中整数字面量(直接量)默认都是int类型。
* 3) 整数的直接量也经常写16进制的形式
*     0x(数字0, 字母x)为16进制数的标识(x大小写,都可以)
*     8进制以0开头
*/
public class TestLiteral {
	public static void main(String[] args) {
		int i;
		//0x(数字0, 字母x)为16进制数的标识
		i = 0xffffffff;
		System.out.println(i);//-1
		int max = 0x7fffffff;//0111 1111 1111 ......
		int min = 0x80000000;//1000 0000 0000......
		
		System.out.println("int最大值:"+max);//2147483647
		System.out.println("int最小值:"+min);//-2147483648
		
		max = Integer.MAX_VALUE;
		System.out.println("JDK提供int最大值:"+max);//2147483647
		min = Integer.MIN_VALUE;
		System.out.println("JDK提供int最小值:"+min);//-2147483648
		
		max = max+1;
		System.out.println("max+1后的结果:"+max);//-2147483648
		min = min-1;
		System.out.println("min-1后的结果:"+min);//2147483647
		
		int max2 = 0x7fffffff;
		System.out.println(max2);//2147483647
		max2 = max2+8;
		System.out.println(max2);//-2147483641
		
	}
}