在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
博学谷Java开发面试基础笔试题分享:char 型变量中能不能存贮一个中文汉字?为什么?"=="和 equals 方法究竟有什么区别?静态变量和实例变量的区别?是否可以从一个 static 方法内部发出对非 static 方法的调用?Integer 与 int 的区别。共五道Java开发面试及答案。
第一题:char 型变量中能不能存贮一个中文汉字?为什么?
char 型变量是用来存储 Unicode 编码的字符的,unicode 编码字符集中包含了汉字,所以,char 型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在 unicode 编码字符集中,那么,这个 char 型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char 类型的变量也是占用两个字节。
第二题:"=="和 equals 方法究竟有什么区别
(单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起说,则很难说清楚)
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存, 例如 Objet obj = new Object();变量 obj 是一个内存,new Object()是另一个内存,此时,变量 obj 所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量, 如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。
equals 方法是用于比较两个独立对象的内容是否相同, 就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:
String a=new String("foo");
String b=new String("foo");
两条 new 语句创建了两个对象,然后用 a,b 这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的, 即 a 和 b 中存储的数值是不相同的,所以,表达式 a==b 将返回
false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回 true。
在实际开发中,我们经常要比较传递进行来的字符串内容是否 等,例如,String input = …;input.equals(“quit”),许多人稍不注意就使用==进行比较了,这是错误的,随便从网上找几个项目实战的教学视频看看,里面就有大量这样的错误。记住,字符串的比较基本上都是使用 equals 方法。
如果一个类没有自己定义 equals 方法,那么它将继承 Object 类的 equals 方法,Object 类的 equals 方法的实现代码如下:
boolean equals(Object o){
return this==o;
}
这说明,如果一个类没有自己定义 equals 方法,它默认的 equals 方法(从 Object 类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用 equals 和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回 false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖 equals 方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。
第三题:静态变量和实例变量的区别
在语法定义上的区别:静态变量前要加 static 关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个 staticVar 变量,并且每创建一个实例对象,这个staticVar 就会加 1;但是,每创建一个实例对象,就会分配一个instanceVar,即可能分配多个 instanceVar,并且每个instanceVar 的值都只自加了 1 次。
public class VariantTest
{
public static int staticVar = 0; public int instanceVar = 0; public VariantTest()
{
staticVar++; instanceVar++;
System.out.println(“staticVar=” + staticVar
+ ”,instanceVar=” + instanceVar);
}
}
第四题:是否可以从一个 static 方法内部发出对非 static 方法的调用
不可以。因为非 static 方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而 static 方法调用时
不需要创建对象,可以直接调用。也就是说,当一个 static 方法被调用时,可能还没有创建任何实例对象,如果从一个 static 方法中发出对非 static 方法的调用,那个非 static 方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个 static 方法内部发出对非 static 方法的调用。
第五题:Integer 与 int 的区别
int 是 java 提供的 8 种原始数据类型之一。Java 为每个原始类型提供了封装类,Integer 是 java 为 int 提供的封装类。int 的默认值为 0,而 Integer 的默认值为 null,即 Integer 可以区分出未赋值和值为 0 的区别,int 则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为 0 的区别,则只能使用
Integer。在 JSP 开发中,Integer 的默认为 null,所以用 el 表达式在文本框中显示时,值为空白字符串,而 int 默认的默认值为0,
所以用 el 表达式在文本框中显示时,结果为 0,所以,int 不适合作为 web 层的表单数据的类型。
在 Hibernate 中,如果将 OID 定义为 Integer 类型,那么Hibernate 就可以根据其值是否为 null 而判断一个对象是否是临时的,如果将 OID 定义为了 int 类型,还需要在 hbm 映射文件中设置其 unsaved-value 属性为 0。
另外,Integer 提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer 中还定义了表示整数的最大值和最小值的常量。
上一篇:&和&&的区别是什么?
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
现在学Java编程开发好就业吗?
现在Java就业市场如何?如果从现在开始学习Java编程开发好就业吗?是不是真的如网上各种文章说的一样,Java开发工程师就业市场人才缺口非常大呢?其实在小编看来,现在的Java就业市场可以总结为两句话:就业机会多,但就业门槛正在不断提升!现在开始学习Java编程开发是否好就业,已经不仅仅是市场需求所决定的,更重要的是通过学习对知识的掌握的程度是否能够与企业招聘需求想匹配。
3833
2020-07-24 16:14:52
学Java的女生好找工作吗?适合编程吗?
在很多人认为女生不适合从事Java工作,Java工作的人逻辑性要求高,且专业操作水平要高,而女生在这方面比较弱。其实这只是一种偏见,女生也可以从事Java工作,且还能发挥自己的优势把Java编程工作做得更好。
4756
2021-01-11 17:12:03
成为Java高级开发工程师实操项目有哪些?
初级Java程序员和高级程序员间的差别就是职业技能和项目实战经验,高级程序员实操过的Java项目越多对于技术的提升越快越受企业欢迎,Java实战项目大致分为游戏类、管理系统、计费系统三类。
3488
2021-04-09 14:47:20
2年Java开发需要具有什么水平?
每个程序员都应该有自己的职业规划,清楚的了解自己在不同的阶段应该掌握什么技能。2年工作经验的Java程序员应该具备的技能是Java程序员们比较关心的内容。掌握得越多能得到的评价拿到的薪水势必也越高。
3432
2021-06-07 16:37:12
学习Java真的可以改变你的人生?
学习Java真的可以改变你的人生?在疫情期间远程办公的方式越来越流行,互联网的发展也越来越迅速,学习一门技术以备后患。或许学习Java真的可以改变你的工作和生活方式!
2584
2022-03-25 14:53:48