java的数据类型

1. 数据类型分类

  1.  基本数据类型(8种基本数据类型)      
  2.  复合类型(引用类型,类类型):类,枚举,接口,数组,字符串(底层用char数组实现)

 

2.基本数据类型分类
  

 

3、基本数据类型及其包装类

       java是一个近乎纯洁的面向对象的语言,但是为了编程的方便还是引入了基本数据类型,为了能将这些基本数据类型能够当做对象处理,因此java为每一个基本数据类型都提供了它的包装类。从java5开始引入了自动装箱、自动拆箱机制,使二者可以相互转换。

 

4.基本数据转换

  • 自动类型转换:数字表示范围小的数据类型可以自动转换成范围大的数据类型。

  • 强制类型转换:强制显示的把一个数据类型转换为另外一种数据类型。
int num=128;
short number=(short)num;
System.out.println(number);

  以上的转换结果都在我们的预期之内,属于正常的转换,但有时强制转换会出现丢失精度、数据溢出的情况。

int b=129;
byte bb=(byte)b;//byte的取值范围在-128~127
System.out.println(bb);

 

5、字符串和基本数据类型之间的转换

  • 字符串转基本数据类型

  调用基本类型对应的包装类中的方法parseXX()valueOf(),即可返回对相应的基本类型

String s="1234";
int a=Integer.parseInt(s);
long b=Long.valueOf(s);
  • 基本数据类型转字符串

一:在基本数据之后与空字符串“”用“+”连接; 二:调用String类中的valueOf()方法

int num=12;
String s1=num+"";
String s2=String.valueOf(num);

 

6、常见面试题:


1.写出下列语句输出结果

例1

public class Demo01 {

	public static void main(String[] args) {
	     Integer a=new Integer(3);
	     Integer b=3;  //3自动装箱成Integer类型,相当于Integer b=new Integer(3)
	     int c=3;
	     System.out.println(a==b);//false  a和b二者都为引用类型,但并没有引用同一个对象
	     System.out.println(a==c);//true   a自动拆箱为int类型再和c比较
	     System.out.println(b==c);//true   b自动拆箱为int类型再和c比较
	}
}

结果:

false
true
true

例2:

public class Demo01 {

	public static void main(String[] args) {
	     Integer f1=100,f2=100,f3=150,f4=150;  
	     System.out.println(f1==f2);//true
	     System.out.println(f3==f4); //false
	}
}

 结果:

true
false

分析:首先f1,f2,f3,f4都会自动装箱为Integer对象,相当于new Integer(),而Integer是引用类型,故它的==比较,比较的就不是值,而是地址,自动装箱的本质就是调用Integer的静态valueOf()方法,查看这个方法的源码可知道,当整型字面量的值在-128~127之间时,就不会

new新的 Integer对象,而是直接引用 常量池的Integer对象,而不在-128~127之间时,才会new新的 Integer对象,因此f1==f2的结果是true,而f3==f4的结果是false。

 

2.String、StringBuffer、StringBuilder的区别

String:字符串常量,在修改时不会改变自身,因为它可以理解为被final修饰的常量,显然是线程安全的。

StringBuffer:在修改时会改变自身,每次操作都是对StringBuffer对象本身做修改,线程安全。

StringBuilder是java5引入的,它和StringBuffer的方法完全相同,二者有均继承于AbstractStringBuilder,会调用该抽象类中的公共方法,如:append、insert、indexOf(...),   区别在于,StringBuffer会在方法上加上synchronized关键字,进行同步,来保证线程安全,而StringBuilder是线程不安全的。

三者如何选择?

如果一个字符串不经常改,优先考虑使用StringBuilder。

程序是单线程的,修改或者操作大量的数据,优先考虑使用StringBuilder。

程序是多线程的,考虑线程安全,修改或者操作大量的数据,优先考虑使用StringBuffer。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值