JAVA语言程序员面试笔试题汇总:基本类型与运算系列
小标 2018-11-05 来源 : 阅读 582 评论 0

摘要:本文主要向大家介绍了JAVA语言程序员面试笔试题汇总:基本类型与运算系列,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言程序员面试笔试题汇总:基本类型与运算系列,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。


1.java提供了哪些基本数据类型?


java语言提供了8中原始的数据类型

byte,short,int,long,float,double,char,boolean

1,2,4,8,4,8,2,1

这些数据类型不是对象,被创建后立即在栈上创建空间

引用类型:类,接口,数组,这类对象在声明时不会被分配内存空间,只是存储了一个内存地址。

此外java语言还提供了原始类型的封装类,(Character,Boolean)

注意:

1)java中的数值类型都是有符号的,不存在无符号的数

2)取值范围固定,不会随硬件环境改变

3)第9中基本类型void,封装类java.lang.void;只是无法直接进行操作

封装类型与原始类型的不同点:

1)原始类型传递时按值传递,封装类型按引用传递

2)用作某个类的实例数据时,默认数据不同:封装类型为null,原始类型与类型有关。


public strictfp class Test{

 String s;

 int i;

 float f;

 

 public static void main(String[] args) {

  Test t = new Test();

  System.out.println(t.s==null);

  System.out.println(t.i);

  System.out.println(t.f);

 }

}

 

结论:

true

0

0.0


注意:

1)在java语言中,默认声明的小数是double类型的,故在对float类型的变量进行初始化时需要进行类型转换。

float类型初始化方式:

float f = 1.0f;

float f = (float)1.0;

2)相似的,直接写的整形数字是int类型的

long l = 26012402244L

引申:

1)java语言中,null是什么;在内存中是什么?

null不是一个合法的Object实例,编译器并没有分配内存,仅仅用来标识该引用目前没有指向任何对象。

2)如何理解String x = null;

定义了一个变量x,x中存放的是String引用,此处为null

   


2.什么是不可变类?


   

即创建了这个类的实例后就不允许修改它的值了

例如所有基本类型的包装类,此外String也是不可变类


   

public strictfp class Test{

 

 public static void main(String[] args) {

  String s = "Hello";

  s +=" World";

  System.out.println(s);

 }

}

结果:

Hello World

 

表面上看是改变了s的值,实际上原来的字符串"Hello"还存在内存中,并没有被改变,只是s指向了地址。


创建一个不可变类要遵循以下几个步骤:

1)类中所有成员变量被private修饰

2)类中没有写或者修改成员变量的方法;例如setXXX,只提供构造函数,一次生成,永不改变。

3)确保类中所有方法不会被子类覆盖,可以通过把类定义为final或把类中的方法定义为final

4)如果一个类成员不是不可变量,那么在成员初始化或者使用get方法获取该成员变量时,需要通过clone方法来确保类的不可变性。

5)如果有必要,可使用覆盖Object类的equals方法和hashCode方法

在equals方法中,根据对象的属性值来比较两个对象是否相等,并且保证equals方法判断为相等的两个对象的hashCode方法的返回值也相等。

这可以确保这些对象能被正确的放到HashMap或HashSet集合中

注意:

由于类的不可变性,在创建对象时就需要初始化所有成员变量,因此最好提供一个带参数的构造函数来初始化这些成员变量。



例1:错误示范

 

import java.util.Date;

 

class ImmutableClass{

 private Date d;

 public ImmutableClass(Date d){

  this.d = d;

 }

 

 public void printState(){

  System.out.println(d);

 }

}

 

public class TestImmutable {

 public static void main(String[] args) {

  Date d = new Date();

  ImmutableClass im = new ImmutableClass(d);

  im.printState();

  d.setMonth(5);

  im.printState();

 }

}

 

结果:

Wed May 23 10:56:32 CST 2018

Sat Jun 23 10:56:32 CST 2018

 

Date对象的状态被改变,而ImmutableClass 保存了Date类型对象的引用,当被引用的对象的状态改变时会导致ImmutableClass 对象状态的改变。

 

例2:正确示范

import java.util.Date;

 

class ImmutableClass{

 private Date d;

 public ImmutableClass(Date d){

  this.d = (Date) d.clone();//解除了引用关系

 }

 

 public void printState(){

  System.out.println(d);

 }

 

 public Date getDate(){

  return (Date) d.clone();

 }

}

 

public class TestImmutable {

 public static void main(String[] args) {

  Date d = new Date();

  ImmutableClass im = new ImmutableClass(d);

  im.printState();

  d.setMonth(5);

  im.printState();

 }

}

 

结果:

Wed May 23 11:03:11 CST 2018

Wed May 23 11:03:11 CST 2018


使用不可变类的优缺点:

优点:

使用简单,线程安全,节省内存

缺点:

不可变类的对象会因为值得不同而产生新的对象,导致无法预料的问题。

   


3.值传递和引用传递的区别


1)值传递:形参与实参有相同的值,不同的存储单元

2)引用传递:形参与实参指向同一块存储单元。

java中,原始数据类型在传递参数时是值传递,而包装类型在传递参数时是引用传递。


例1:

<div class="    

   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程