摘要:本文主要向大家介绍了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频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号