Java数据类型,包装类,数据类型的转换

在Java语言中,所有的变量在使用前必须声明。

Java两大数据类型:

  • 基本数据类型
  • 引用数据类型

Java的基本数据类型

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

基本数据类型存储在栈上,栈上存取速度最快。

数据类型字节数取值范围(十进制)默认值包装类
byte1-27~(27-1)0Byte
short2-215~(215-1)0Short
char2\u0000~\uffff\u0000Character
int4-231~(231-1)0Integer
long8-263~(263-1)0LLong
float43.4E-38~3.4E380.0FFloat
double81.7E-308~1.7E3080.0DDouble
boolean未定义true/falsefalseBoolean

float和double的最小值和最大值都是以科学记数法的形式输出的,结尾的"E+数字"表示E之前的数字要乘以10的多少次方。比如3.14E3就是3.14 × 103 =3140,3.14E-3 就是 3.14 x 10-3=0.00314。

实际上,Java中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。

Java的包装类

包装类均位于java.lang包,基本数据类型所对应的包装类已在上表中列出。

包装类的主要用途:

  1. 作为和基本数据类型对应的类型存在,使基本类型也可以成为对象,方便涉及到对象的操作。
  2. 包含每种基本数据类型的相关属性,如最大值、最小值等,以及相关的操作方法。

以Integer为例:
一、装箱(ValueOf()方法 装箱)

	Integer i = 10;//valueOf方法   装箱
	Integer i2 = (Integer)10;//显示装箱
	Integer i3 = new Integer(20);//new  堆分配内存

二、拆箱(intValue()方法 拆箱)

	int i2 = i;//intValue方法  拆箱
	int i3 = (int)i;//显示拆箱

对于如下两段代码以及运行结果进行讨论:

    Integer i1 = 127;
    Integer i2 = 127;
    System.out.println(i1==i2);
    System.out.println(i1.equals(i2));

运行结果:
这里写图片描述

    Integer i1 = 128;
    Integer i2 = 128;
    System.out.println(i1==i2);
    System.out.println(i1.equals(i2));

运行结果
这里写图片描述
在讨论之前我们先来了解一下equals()方法:

equals的比较方法
这里写图片描述
查看ValueOf()方法得知
这里写图片描述
对于第一段程序:i1=127,i2=127,满足这个if条件,i1i2均在缓存中,比较时i1i2均指向同一个地址,比较(i1.equals(i2))时比较的是两个对象的值,所以运行结果都为true。
对于第二段程序:i1=128,i2=128,不满足这个if条件,i1、i2均new了一个新的对象,new出的对象放在堆中不同的地址下,所以运行结果为false。比较(i1.equals(i2))时比较的是两个对象的值,所以运行结果为true。

数据类型的转换

不能对boolean类型进行类型转换。

byte <short< int< long <float< double(均有一位符号位),小类型可转换为大类型,即可以隐式转换。

byte a=1;
int  b=a;
double c=a;

char类型无符号位,与其他类型需要强制转换。

大类型转换为小类型需要强制转换。

int d=2;
char e=(char) d;
short f=(short) d;

在运算的时候会自动转化为int,所以需要强制类型转换

 byte a1 = 1;
 byte a2 = 2;
 byte a3 = (byte) (a1 + a2);
byte  b = 1;
char ch =(char)b;//byte--->int--->char

浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入

(int)23.7 == 23;        
(int)-45.89f == -45

引用类型

在java中类型可分为两大类:值类型与引用类型。值类型就是上述基本数据类型,而引用类型是指除了值类型之外的所有类型。引用类型是由类型的实际值引用(类似于C/C++的指针)表示的数据类型。如果为某个变量分配一个引用类型,则该变量将引用(指向)原始值。引用类型包括类,接口,委托和装箱值类型。基本类型只有一块在栈中的存储空间,引用类型有两块存储空间分别在栈,堆中。

下面我们用实际例子来深入理解一下引用类型:
1.

		String str1 = "Tulun";
		String str2 = "Tulun";
		System.out.println(str1 == str2);

结果为true。
这里写图片描述
2.

		String str3 = new String("Tulun");
		String str4 = new String("Tulun");
		System.out.println(str3 == str4);

结果为false。
这里写图片描述
3.

		String str5 = new String("Tulun");
		String str6 = "Tulun";
		System.out.println(str5 == str6);

结果为false。
这里写图片描述
4.

		String str7 = new String("Tulun");
		String str8 = "Tu"+"lun";
		System.out.println(str7 == str8);

结果为false。
这里写图片描述
5.

		String str9 = new String("Tulun");
		String str10 = "Tu"+new String("lun");
		System.out.println(str9 == str10);

结果为false。
这里写图片描述
6.

		char[] array = {'T','u','l','u','n'};
		String str11 = new String(array);
		String str12 = "Tulun";
		System.out.println(str11 == str12);

结果为false。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值