android 面试(基础篇 3)

14.java中int char long各占多少字节

char

16位

2字节

byte

8位

1字节

short

16位

4字节

int

32位

4字节

long

64位

8字节

float

32位

4字节

duoble

64位

8字节

 

15.java中int和Integer的区别

int和integer的区别从大方面来说是基本数据类型与其包装类的区别:

int是基本类型,直接存数组,而integer是对象用一个引用指向这个对象  

      1)java中数据类型分为基本数据类型和复杂数据类型

       int是前者而integer是后者,因此int初始化时时0,integer是null

      2)初始化时

      int i = 1;  Integer i =  new Integer(1); 但是由于有了自动装箱和拆箱

       使得Integer类也可以使用:Integer i = 1;

      int是基本数据类型,integer是类,是int的扩展,定义了很多转换方法,

       而且还提供了处理int类型是非常有用的其他一些方法和常量

       类似的还有float Float; duoble Double; string String;等,

 

举个例子:当需要往ArrayList,HashMap中放东西时,像int,double这种内建类型是放不进去的, 

因为容器都是装 object的,这是就需要这些内建类型的外覆类了。Java 中每种内建类型都有相应的外覆类。

   Java中int和Integer关系是比较微妙的。关系如下:

   1.int是基本的数据类型;

   2.Integer是int的封装类;

   3.int和Integer都可以表示某一个数值;

   4.int和Integer不能够互用,因为他们两种不同的数据类型;

举例说明

  ArrayList al=new ArrayList();

   intn=40;

   IntegernI=new Integer(n);

   al.add(n);//不可以

   al.add(nI);//可以

并且泛型定义时也不支持int: 如:List<Integer> list = newArrayList<Integer>();可以  

      而List<int> list =new ArrayList<int>();则不行

      总而言之,如果我们定义一个int类型的数,只是用来进行一些加减乘除运算或作为参数

      进行传递,那么久可以直接声明为int基本数据类型,但是如果要向对象一样来进行处理,

      那么久要用integer来声明一个对象,因为java是面向对象的语言,因此当声明为对象时

      能提供很多对象间转换的方式,与一些常用的方法。

16.string stringbuffer stringbuilder 区别

String 字符串常量
StringBuffer
字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 

因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后

将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用String,因为每次生成对

象都会对系统性能产生影响,特别当内存中无引用对象多了以 后,JVM 的 GC 就会开始工作,

那速度是一定会相当慢的。

而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操

作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,

特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被

 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 

对象慢,而特别是以下的字符串对象生成中, String 效 率是远要比 StringBuffer 快的:

       String S1 = “This is only a” + “simple” + “ test”;

       StringBuffer Sb = newStringBuilder(“This is only a”).append(“ simple”).append(“test”); 

你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度

上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个    StringS1 = “This is only a” 

+ “ simple” + “test”; 其实就是: String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。

但大家这里要注意的       是,如果你的字 符串是来自另外的 String 对象的话,速度就没那么快了,

譬如: String S2 = “This is only a”; String S3 = “ simple”; String S4 = “ test”; String S1 = S2 +S3 + S4; 

这时候 JVM 会规规矩矩的按照原来的方式去做。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值