烂笔头 (一 )android 面试 mark

1、java==equalshashCode的区别 

== 是运算符,用于比较两个变量是否相等

equals 是object类方法,用于比较两个对象是否相等,默认object类的equals方法是比较两个对象的地址,跟 == 的结果是一样的

hascode也是object类的一个方法,返回一个离散的int型整数,在集合类操作中使用,为了提高查询速度(hashmap,hashset等)

综上在java中:

1)如果是基本数据类型,即原始数据类型,byte short char int long float double boolean ,这些之间的比较,应该用==,比较的是值;

2)如果是复合数据类型,用==比较时,比较的是内存存放的地址。所以除非是同一个new出来的对象,比较后的结果为true,否则比较后结果为false。java中所有类都是继承于object这个基类,在object中定义了一个equals方法,最初是用来比较对象的内存地址。但是在一些类库中这个方法被覆盖掉了,如string integer date在这些类中equals有自身的实现,不再是比较类在堆内存中的存放地址了

对于复合数据类型之间进行equals比较,在没有equals方法的情况下,它们之间的比较还是基于内存中存放位置的地址值,因为object的equals方法也是用==进行比较的,所以比较结果相同

http://www.cnblogs.com/luankun0214/p/4421770.html

 

2、intinteger的区别 

int是java的一种基本数据类型,integer是int的包装类;

int不需要实例化后才能使用,integer需要;

int 默认值为0,integer默认值为null;

int直接存储数据值,integer实际是对象的引用,当new一个integer时,实际上是生成一个指针指向对象;

https://www.cnblogs.com/guodongdidi/p/6953217.html

 

3StringStringBufferStringBuilder区别 

运行速度方面:执行速度从快倒慢,stringbuilder > stringbuffer > string

string为字符串常量,而stringbuilder和stringbuffer为字符串变量,即string对象一旦建立就不可更改,java 对string对象的处理实际上是一个不断创建新对象并将旧对象回收的一个过程,所以速度慢。

而stringbuilder和stringbuffer 对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比string快很多。

线程安全方面:stringbuilder是线程不安全的,而stringbuffer是线程安全的

如果一个stringbuffer对象在字符串缓冲区被多个线程使用时,stringbuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但stringbuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作,所以如果要进行的操作是多线程,那么就要使用stringbuffer,但在单线程的情况下,还是建议用速度比较快的stringbuilder

综上

string 适用于少量的字符串操作的情况

stringbuilder 适用于单线程下在字符缓冲区进行大量操作的情况

stringbuffer 适用于多线程在字符缓冲区进行大量操作的情况

 

4、什么是内部类?内部类的作用

类中的类叫内部类。作用:

1)内部类可以很好的实现隐藏,可以有private 和protected 权限

2)内部类拥有外部类的所有元素的访问权限

3)可实现多重继承

4)避免修改接口而实现同一个类中两种同名方法的调用

 

5、进程和线程的区别 

进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概率,竞争计算机系统资源的基本单位。

线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位,线程也被称为轻量级进程。

一个程序至少一个进程,一个进程至少一个线程。

每个进程都有自己的地址空间,即进程空间,在网络或多用户换机下,一个服务器通常需要接收大量不确定数量用户的并发请求,为每一个请求都创建一个进程显然行不通(系统开销大影响用户请求效率低),因此引入线程。

线程的执行过程是线性的,尽管中间会发生中断或者暂停,但是进程所拥有的资源只为该线程执行过程服务,一旦发生线程切换,这些资源需要被保护起来。

进程分为多线程进程和单线程进程,单线程进程宏观来看也是线性执行过程,微观上只有单一的执行过程。多线程进程宏观是线性的,微观上多个执行操作。

两者区别如下:

地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。

资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。

一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

进程切换时,消耗的资源大,效率高。所以涉及到频繁切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。

对资源管理和保护要求高,不限制开销和效率时,使用多进程。

要求效率高,频繁切换时,资源的保护管理要求不是很高时,使用多线程。

 

6finalfinallyfinalize的区别 

A)final类

》final可以用来修饰类,方法和变量(成员变量或局部变量)

当final修饰类的时候,表明该类不能被其他类所继承,当我们需要让一个类永远不被继承,此时就可以用final修饰,final类中所有的成员方法都会隐藏的定义为final方法。

》final修饰方法

把方法锁定,以防止继承类对其进行更改;

效率,在早期的java版本中,会将final方法转为内嵌调用,但若方法过于庞大,可能在性能上不会有多大提升,因此在最近版本中,不需要final方法进行这些优化了。

final 方法不能被重写。若父类中final方法的访问权限为private,将导致子类中不能直接继承该方法,此时可以在子类中定义相同方法名的函数,此时不会与重写final的矛盾,而是在子类中重新定义了新方法。

》final修饰变量

final 成员变量表示常量,只能被赋值一次,复制后其值不再改变,类似于C++的const。当final修饰一个基本数据类型时,表示该基本数据类型的值一旦初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不再指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。本质上是一回事,因为引用的值是一个地址,final要求值即地址的值不发生变化。

final修饰一个成员变量(属性),必须要显示初始化,在变量声明的时候初始化,或者在构造函数中对这个变量赋初值。

当函数的参数类型声明为final时,说明该参数是只读型的。即你可以读取使用该参数,但是无法改变该参数的值。

string被设计成final类。平时修改string时,都是创建一个新对象后再引用

B)finally

finally作为异常处理的一部分,它只能用在t

 

 

7Serializable Parcelable 的区别 

8、静态属性和静态方法是否可以被继承?是否可以被重写?以及原因? 

9、成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用 

 


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值