文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java中的八种基本数据类型详解

2024-04-02 19:55

关注

一、八种基本数据类型常识

基本常识表

对于上图有以下几点需要注意:

详解二、直接量与类型转换

2.1、直接量

@Test
	public void d() {
		int a=100;//这个100就是直接量
		a=a+100;//但是这个a+100不是直接量
		double b=3.14;
	}

2.2、类型转换

1.自动转换:低类型的向高类型的转换 

如下图:顺着箭头的方向是可以自动转换的;

2.强制转换:高类型的向底类型转换,但可能会数据溢出或者精度丢失

以上现象在实际中可以出现这三种问题:

@Test
	public void e(){
		long a=200;//200是直接量,默认为int类型这里是自动转换为弄类型
		
		
		//100000000000是个整数直接量,默认应该为int类型,但是超出了int类型的取值范围
		
		long c=1000000000000L;
		//在整数直接量后面将了一个L,表示该直接量不再默认为int类型,为long类型,所以没错
		
		
		//浮点型直接量默认为double,double类型大,所以不能直接转换为float
		
		float e=34.3f;
		//在浮点数直接量后面加上一个f,表示该直接量不再默认为double,为float类型
	}

以上为几种正常的情况,但是有一种特殊的情况,就是int型直接量可以直接赋给byte、short、char类型变量,只要不超出变量类型的取值范围

@Test 
	public void f() {
		byte a=100;
		short b=200;
		char c=100;//注意char类型是一种特殊的int类型,可以不用写成单引号括起来的
		
		
		
		
		
	}

(1)运算时,运算结果会向较大的类型转换

@Test
	public void g() {
		int a=3;
		double b=4;
		System.out.println(a+b);//输出7.0
		
		float c=3.2f;
			
	}

(2)特殊的:byte、short、char三种数据类型参与运算时,先一律转化为int类型;

	@Test
	public void h() {
		byte a=3;
		byte b=4;
		
		int d=a+b;
	}

高等级转为低等级的时候,必须强制转换,但实际工作中不推荐使用强制转换,可能会失精度或数据溢出;

@Test
	public void j() {
		int a=128;
		byte b=(byte)a;
		System.out.println(b);//输出-128,出现了数据溢出
		
		double c=1.23;
		int d=(int)c;
		System.out.println(d);//输出1,精度丢失
	}

补充说明:不是只有强制转换的时候会出现数据,例如下面这种情况

@Test
	public void k() {
		int a=10000000;
		int b=10000000;
		int c=a*b;
		System.out.println(c);//输出276447232,得到的结果超出了int类型的范围,数据溢出
	}

三、对应包装类及使用

3.1、基本介绍

java是一门面向对象的语言,但是8中基本数据类型不具备面向对象的特征,所以实际使用中很不便所以为java八种基本数据类型提供了对应的包装类。

基本数据类型对应包装类包装类的父类
bytejava.lang.Bytejava.lang.Number
shortjava.lang.Shortjava.lang.Number
intjava.lang.Integerjava.lang.Number
longjava.lang.Longjava.lang.Number
floatjava.lang.Floatjava.lang.Number
doublejava.lang.Doublejava.lang.Number
booleanjava.lang.Booleanjava.lang.Object
charjava.lang.Characterjava.lang.Object

3.2、常用方法一:静态方法 valueOf()

@Test
	public void a() {
	
		Integer i=Integer.valueOf(10);
		System.out.println(i);//输出10
	
	
		Integer a=Integer.valueOf("100");
		System.out.println(a);//输出100
		
		Integer b=Integer.valueOf("100a")为
		System.out.println(b);//运行错误,字符串的值不少一个int类型的
		
	}

3.3、常用方法二:静态方法parseXXX(String str)

@Test
	public void b() {
		
		int a=Integer.parseInt("100");
		System.out.println(a);//输出100
		
		int b=Integer.parseInt("100a");
		System.out.println(b);//运行错误,字符串的值不为int类型
				
	}

3.4、常用方法二:非静态方法XXXValue()

  1. 因为是非静态方法,所以不能像上面两个方法用类名调用了;
  2. 数字类的包装类(八种包装类中父类是Number的的六个类)才有该方法;
  3. 作用:将当前包装类对象转换为对应的基本数据类型;
@Test
	public void c() {
		
		
		Integer a=Integer.valueOf(100);//将基本数据类型转换为包装类对象
		int b=a.intValue();//将包装类对象转换为对应的基本数据类型
		System.out.println(b);//输出100
		
		Double c=Double.valueOf(2.33);
		double d=c.doubleValue();
		System.out.println(d);
	}

3.5、自动拆箱与装箱

简介:jdk1.5之后的新特性。该特性是编译器认可的,是在编译器自动将基本数据类型和包装类相互转换,节省了麻烦。

@Test
	public void d() {
		
		Integer i=123;//原理是 Integer i=Integer.valueOf(123);
		
		
		int i1=i+1;//原理是	int i1=i.intValue()+1;
		
		Integer a=123;
		Integer b=123;
		Integer c=a+b;
		
	}

3.6、关于valueOf()方法源码研究

通过按住Ctrl键,鼠标点击该方法即可查看源码,以Integer类的valueOf(int i)的源码为例

 public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

通过查看其它类的该方法的源码之后,可以得到该表:

包装类valueOf(X i)返回对象的原则
Byte直接取,数组范围为(-128,127),且byte值的范围也是(-128,127)
Short(-128,127)之间在数组中取,否则new
Integer(-128,127)之间在数组中取,否则new
Long(-128,127)之间在数组中取,否则new
Float直接new
Double直接new
Boolean直接返回,不new
Character0-127之间从数组中取,否则new

四、相关面试题

4.1、类型转换

注意一些喜欢忽视的类型转换

public static void main(String[] args) {
		int a=10;
		double b=3.4;
		System.out.println(a>b?a:b);
		System.out.println(a);
	}

4.2、+=的情况

public static void main(String[] args) {
		short a=1;	//第一行
		 a=a+1;		//第二行
		 a+=1;		//第三行
}

4.3、自动装箱

包装类和基本数据类型比较时,只要值相等就相等

public static void main(String[] args) {
		Integer a1=127;
		Integer a2=127;
		int a3=127;
		Integer b1=128;
		Integer b2=128;
		int b3=128;
		System.out.println(a1==a2);
		System.out.println(a1==a3);
		System.out.println(b1==b2);
		System.out.println(b1==b3);	
}

4.4、char类型存储汉字

char类型能不能存储一个汉字?为什么?

解析:能,char类型采用的是Unicode编码,Unicode编码包含汉字,所以char类型自然是可以存储一个汉字的

4.5、浮点数精度问题

public static void main(String[] args) {
		System.out.println(0.1*3==0.3);
		System.out.println(0.1*4);
}

到此这篇关于Java八种基本数据类型的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯