4、Java 基本数据类型

4、Java 基本数据类型

4.1、基本数据类型

Java的两大数据类型:基本数据类型、引用类型

基本数据类型:

Java语言提供了八种基本数据类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

byte:(一个字节)

  • byte 数据类型是8位(bit)、有符号的,以二进制补码表示的整数;
  • 最小值是 128(2^7);
  • 最大值是 127(2^71);
  • 默认值是 0;
  • 例子:byte a = 100,byte b = 50。

short:(两个字节)

  • short 数据类型是 16 位、有符号的以二进制补码表示的整数
  • 最小值是 32768(2^15);
  • 最大值是 32767(2^15 1);
  • Short 数据类型可以节省空间。一个short变量是int型变量所占空间的二分之一;
  • 默认值是 0;
  • 例子:short s = 100,short r = 200。

int:(四个字节)

  • int 数据类型是32位、有符号的以二进制补码表示的整数;
  • 最小值是 2,147,483,648(2^31);
  • 最大值是 2,147,483,647(2^31 1);
  • 一般地整型变量默认为 int 类型;
  • 默认值是 0 ;
  • 例子:int a = 1000, int b = 2000。

long:(8个字节)

  • long 数据类型是 64 位、有符号的以二进制补码表示的整数;
  • 最小值是 9,223,372,036,854,775,808(2^63);
  • 最大值是 9,223,372,036,854,775,807(2^63 1);
  • 这种类型主要使用在需要比较大整数的系统上;
  • 默认值是 0L;
  • 例子: long a = 100000L,Long b = 200000L。

注意:"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所
以最好大写。

float:(4个字节)

  • float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
  • float 在储存大型浮点数组的时候可节省内存空间;
  • 默认值是 0.0f;
  • 浮点数不能用来表示精确的值,如货币;
  • 例子:float f1 = 234.5f

double:(8个字节)

  • double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;
  • 浮点数的默认类型为double类型;
  • double类型同样不能表示精确的值,如货币;
  • 默认值是 0.0d;
  • 例子:double d1 = 123.4。

boolean:

  • boolean数据类型表示一位的信息;
  • 只有两个取值:true 和 false;
  • 这种类型只作为一种标志来记录 true/false 情况;
  • 默认值是 false;
  • 例子:boolean one = true。

char:(2个字节)

  • char类型是一个单一的 16 位 Unicode 字符;
  • 最小值是 \u0000(即为0);
  • 最大值是 \uffff(即为65,535);
  • char 数据类型可以储存任何字符;
  • 例子:char letter = 'A';。

类型默认值

下表列出了 Java 各个类型的默认值:

数据类型默认值
byte0
short0
int0
long0L
float0.0f
double0.0d
char'u0000'
booleanfalse
String(or any object)null

实例

public class Test {
    static boolean bool;
    static byte by;
    static char ch;
    static double d;
    static float f;
    static int i;
    static long l;
    static short sh;
    static String str;
 
    public static void main(String[] args) {
        System.out.println("Bool :" + bool);
        System.out.println("Byte :" + by);
        System.out.println("Character:" + ch);
        System.out.println("Double :" + d);
        System.out.println("Float :" + f);
        System.out.println("Integer :" + i);
        System.out.println("Long :" + l);
        System.out.println("Short :" + sh);
        System.out.println("String :" + str);
    }
}

实例输出结果为:

Bool     :false
Byte     :0
Character:
Double   :0.0
Float    :0.0
Integer  :0
Long     :0
Short    :0
String   :null

Java语言支持一些特殊的转义字符序列:

符合字符含义
\n换行(0x0a)
\r回车(0x0d)
\f换页符(0x0c)
\b退格(0x08)
\0空字符(0x20)
\s字符串
\t制表符
\'单引号
\"双引号
\\反斜杆
\ddd八进制字符(ddd)
\uxxxx十六进制Unicode字符(xxxx)

 

引用类型:

  • 在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
  • 对象、数组都是引用数据类型。
  • 所有引用类型的默认值都是null。
  • 一个引用变量可以用来引用任何与之兼容的类型。
  • 例子:Site site = new Site("Runoob")。

4.2、基本数据类型的包装类

Java每个基本类型在java.lang包中都有一个相应的包装类
包装类有何作用
1. 提供了一系列实用的方法
2. 集合不允许存放基本数据类型数据,存放数字时,要用包装类型

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacher
booleanBoolean

这八种包装类所继承的父类不全都相同。
1)Integer ,Byte,Float,Double,Short,Long都属于Number类的子类,Number类本身提供了一系列的返回以上六种基本数据类型的操作。
2)Character属于Object子类。
3)Boolean属于Object子类。

装箱及拆箱
1)将基本数据类型变成包装类称为装箱
2)将包装类的类型变为基本数据类型称为拆箱。

3)在JDK1.5之后,提供了自动装箱和自动拆箱功能。

示例代码:

public class PrimitiveTypeTest {
	public static void main(String[] args) {
		// ===========包装类
		// ‐‐提供一些实用的方法
		String s = "123456";
		int q = Integer.parseInt(s);
		int t = Integer.valueOf(s);
		System.out.println(t);

		// 十进制转成十六进制:
		System.out.println(Integer.toHexString(500));
		// 十进制转成八进制
		System.out.println(Integer.toOctalString(500));
		// 十进制转成二进制
		System.out.println(Integer.toBinaryString(500));
		// 十六进制转成十进制
		System.out.println(Integer.valueOf("FFFF", 16).toString());
		// 八进制转成十进制
		System.out.println(Integer.valueOf("776", 8).toString());
		// 二进制转十进制
		System.out.println(Integer.valueOf("0101", 2).toString());

		// ‐‐自动装箱和自动拆箱
		Integer int1 = t;
		int int2 = int1;

		// ===包装类的一些常用类变量
		// byte
		System.out.println(" 基本类型:byte 二进制位数:" + Byte.SIZE);
		System.out.println(" 包装类:java.lang.Byte");
		System.out.println(" 最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
		System.out.println(" 最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
		System.out.println();
		
		// short
		System.out.println(" 基本类型:short 二进制位数:" + Short.SIZE);
		System.out.println(" 包装类:java.lang.Short");
		System.out.println(" 最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
		System.out.println(" 最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
		System.out.println();

		// int
		System.out.println(" 基本类型:int 二进制位数:" + Integer.SIZE);
		System.out.println(" 包装类:java.lang.Integer");
		System.out.println(" 最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
		System.out.println(" 最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
		System.out.println();

		// long
		System.out.println(" 基本类型:long 二进制位数:" + Long.SIZE);
		System.out.println(" 包装类:java.lang.Long");
		System.out.println(" 最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
		System.out.println(" 最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
		System.out.println();
		
		// float
		System.out.println(" 基本类型:float 二进制位数:" + Float.SIZE);
		System.out.println(" 包装类:java.lang.Float");
		System.out.println(" 最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
		System.out.println(" 最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
		System.out.println();
		
		// double
		System.out.println(" 基本类型:double 二进制位数:" + Double.SIZE);
		System.out.println(" 包装类:java.lang.Double");
		System.out.println(" 最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
		System.out.println(" 最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
		System.out.println();
		
		// char
		System.out.println(" 基本类型:char 二进制位数:" + Character.SIZE);
		System.out.println(" 包装类:java.lang.Character");
		// 以数值形式而不是字符形式将 Character.MIN_VALUE 输出到控制台
		System.out.println(" 最小值:Character.MIN_VALUE=" + (int) Character.MIN_VALUE);
		// 以数值形式而不是字符形式将 Character.MAX_VALUE 输出到控制台
		System.out.println(" 最大值:Character.MAX_VALUE=" + (int) Character.MAX_VALUE);

		// boolean
		System.out.println(Boolean.FALSE);
		System.out.println(Boolean.TRUE);
	}
}		

4.3、类型转换

一、自动类型转换(隐式类型转换)
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。

转换从低级到高级

 

自动转换有以下规律:

  • 小的类型自动转化为大的类型
  • 整数类型可以自动转化为浮点类型,可能会产生舍入误差
  • 字符可以自动提升为整数

二、强制类型转换(显式类型转换)
格式: (type)value   

type是要强制类型转换后的数据类型
注意:

  • 强制类型转换可能导致溢出或损失精度
  • 在把容量大的类型转换为容量小的类型时必须使用强制类型转换
  • 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
public class ConvertType {
	public static void main(String[] args) {
		// =====自动类型转换(隐式转换)
		// 小的类型自动转化为大的类型
		byte byteValue1=110;
		int intValue1=byteValue1+50;
		System.out.println(intValue1);
		
		// 整数类型可以自动转化为浮点类型,可能会产生舍入误差
		// Float和Double提供了快速的运算,然而问题在于转换为二进制的时候,有些数字不能完全
		float floatValue1=2+10f;
		float floatValue2=floatValue1‐11.9f;
		System.out.println(floatValue2);
		
		// 字符可以自动提升为整数
		char charValue1 ='a';
		int intValue2=charValue1+10;
		System.out.println(intValue2);
		
		//======强制类型转换
		//‐‐强制类型转换可能导致溢出或损失精度
		//导致溢出
		byte d = (byte) 128;
		// 00000000 00000000 00000000 10000000 128的原码
		// 00000000 00000000 00000000 10000000 128的反码
		// 00000000 00000000 00000000 10000000 128的补码
		// 10000000 的补码
		// 11111111 反码
		// 10000000
		System.out.println(d);		
				
		/**
		* 关于 原码,反码,补码的知识(了解)
		* 正数的反码,补码是其本身;
		* 负数的反码是符号位保持不变,其余位取反;负数的补码是在其反码的基础上+1
		*/
		
		//损失精度
		System.out.println(Long.MAX_VALUE);
		float floatValue3=(float) Long.MAX_VALUE;
		System.out.println(floatValue3);
		
		//‐‐在把容量大的类型转换为容量小的类型时必须使用强制类型转换
		int intValueA=120;
		byte byteValueB=(byte) intValueA;
		System.out.println(byteValueB);
		
		//‐‐浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
		int intValue3=(int)23.7;
		int intValue4=(int)‐23.7;
		System.out.println(intValue3);
		System.out.println(intValue4);
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值