在线客服
扫描二维码
下载博学谷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运行机制是什么?
5070
2019-11-05 18:28:09
Git常用命令速查手册
众所周知,Git是一个能够有效高速地处理项目版本管理的分布式版本控制系统。如果你是一个开发者,Git无疑是你必须要学习的分布式版本控制系统。Git作为一个便捷的工具,它有许多命令,但是一般来讲你不用全部掌握,只需要记住一些常用命令就行了。因此本文为大家准备了Git常用命令速查手册,现在就来看看吧!
3764
2019-11-20 11:12:09
成为Java架构师难吗?普通程序员应该怎样进阶提升?
长久以来,做Java开发的程序员都是就业市场上的“香饽饽”。然而,对于普通的Java程序员来讲,想要在自己的职业生涯中进一步的提升,进阶成为专精技术路线的Java架构师,需要掌握的知识和技能是很多的。因此如果问,成为Java架构师难吗?答案是肯定的,那么普通程序员应该怎样进阶提升呢?这就是本文要和大家着重讨论的主题。
4796
2019-12-23 13:45:37
Git环境安装步骤讲解
Git完全颠覆了传统版本控制的套路,并对各个环节的实现方式作了新的设计。它更像是个小型的文件系统,但同时还提供了许多以此为基础的超强工具,而不只是一个简单的VCS。今天我们要讲的是Git的环境安装步骤,这是掌握Git的第一课,下面一起来看Git环境安装步骤讲解吧!
3194
2020-06-23 17:07:57
Spring AOP应用场景有哪些?Aop工作原理分析
Aop工作原理分析,面向切面编程,是通过代理的方式为程序添加统一功能,集中解决一些公共问题。应用在Debugging 调试、logging, tracing, profiling and monitoring 记录跟踪优化校准场景中。
8398
2020-09-02 11:08:42