java面试题【一】

1. &和&&的区别

按位与:ao&ba是把ao和ba都转换成二进制数然后再进行与的运算;

逻辑与:ao&&ba就是当且仅当两个操作数均为 true时,其结果才为 true,只要有一个为false,a&&b就为false。

&&进行的是短路判断,即如果左侧的表达式的结果为false,整个的结果就为false,不再计算右侧的表达式的值。

2. 八种基本数据类型的大小,以及他们的封装类

 注:

1.int 是基本数据类型, Integer int 的封装类,是引用类型。 int 默认值是 0 ,而 Integer 默认值是
null ,所以 Integer 能区分出 0 null 的情况。一旦 java 看到 null ,就知道这个引用还没有指向某个对象,
再任何引用使用前,必须为其指定一个对象,否则会报错。
2. 基本数据类型在声明时系统会自动给它分配空间,而引用类型声明时只是分配了引用空间,必须
通过实例化开辟数据空间之后才可以赋值。数组对象也是一个引用对象,将一个数组赋值给另一个数组
时只是复制了一个引用,所以通过某一个数组所做的修改在另一个数组中也看的见。
虽然定义了 boolean 这种数据类型,但是只对它提供了非常有限的支持。在 Java 虚拟机中没有任何
boolean 值专用的字节码指令, Java 语言表达式所操作的 boolean 值,在编译之后都使用 Java 虚拟机
中的 int 数据类型来代替,而 boolean 数组将会被编码成 Java 虚拟机的 byte 数组,每个元素 boolean 元素
8 位。这样我们可以得出 boolean 类型占了单独使用是 4 个字节,在数组中又是 1 个字节。使用 int 的原
因是,对于当下 32 位的处理器(
CPU )来说,一次处理数据是 32 位(这里不是指的是 32/64 位系统,而
是指 CPU 硬件层面),具有高效存取的特点。

3. switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?

基本类型或 Integer 包装类型,由于, byte,short,char 都可以隐含转换为 int,所以,这些类型以及这些类型
的包装类型也是可以的。显然, long 和 String 类型都不符合 switch 的语法规定,并且不能被隐式转换成 int
类型,所以,它们不能作用于 swtich 语句中。 另外由于 JDK1.7 中引入新特性,所以 swtich 语句可以接收
一个 String 类型的值, String 可以作用在 swtich 上。

switch只能时int 或这能转化为int型的byte,short,char,jdk1.7之后String也可以。

4. short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

首先得清楚Java的基本数据类型转换规则:大的数据类型转换为小的数据类型需要强制转换,反之可以自动转换。赋值表达式等号两侧的转换的规则是右侧的向左侧的看齐,即右侧表达式要转换到和左边的类型一样。

short s1 = 1; s1 = s1 + 1;

是错误的,s1 + 1,s1是short类型,1是int型,s1会自动转换为int型的1,与1相加后,得到int型的2,要向左侧的short类型的s1看齐,即需要通过强制类型转换。正确写法:s1 = (short) (s1 + 1);

 short s1 = 1; s1 += 1;

 由于 += java 语言规定的运算符,java 编译器会对它进行特殊处理,因此可以正确编译

 5. char 型变量中能不能存贮一个中文汉字?为什么?

char 型变量是用来存储 Unicode 编码的字符的, unicode 编码字符集中包含了汉字,所以, char 型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在 unicode 编码字符集中,那么,这个 char 型变量中就不能存储这个特殊汉字。补充说明: unicode
编码占用两个字节,所以, char 类型的变量也是占用两个字节。
备注:后面一部分回答虽然不是在正面回答题目,但是,为了展现自己的学识和表现自己对问题理解的透彻深入,可以回答一些相关的知识,做到知无不言,言无不尽。

6. 使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

  final关键字的作用
            修饰类:不能被继承
            修饰变量:引用的指向不能发生改变,引用指向的对象内容是可以发生改变的
            修饰方法:不能被重写

7. "=="和 equals 方法究竟有什么区别?

== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值