一些JAVA中有趣的面试题

  这几天的JAVA培训课上,不断的唤醒自己对JAVA的理解(时间太长,大学学的快忘干净了),其中有一些很有趣的面试题,都是在抠JAVA细节(唉,我是那种见坑就往下跳的人,一做就错),下面就来分享一下:
  1)用JAVA程序写出当你在超市购物花费1.1元时,你给收银员2元钱,收银员找你0.9元的过程;
  当时一看题目,好简单啊!迅速写出:
public class Sell{
  public static void main(String[] args){
    double total = 2.0;
    double used = 1.1;
    double result = total - used;
    System.out.println("result : " + result);
  }
}
结果就悲剧了,因为JAVA中的浮点型运算只得到近似值,运行结果为:0.8999999999999999
为得到精确结果,需要调用JAVA在java.math包中提供的API类BigDecimal。(float和double只能用来做科学计算或者工程计算,在商业计算中要用java.math.BigDecimal)
正确结果为:
import java.math.BigDecimal;

public class Sell1{
  public static void main(String[] args){
    BigDecimal bd1 = new BigDecimal("2.0");
    BigDecimal bd2 = new BigDecimal("1.1");
    System.out.println((double)bd1.subtract(bd2));
  }
}
运行结果:0.9

  2)用强制类型转换(int)(char)(byte)-1,最后的结果为多少
  当时看到这道题瞬间一愣,后来一想不还是-1吗,但不确定,就运行了一下,的到的结果为:65535((⊙o⊙)…更蒙了),后来才知道char字符型,存放字符常量,底层使用16位无符号整型表示,而且有符号数采用符号扩展,无符号数采用0扩展(计算机中,数都以补码的形式存放),所以计算的过程为:

  100000000000000000000001

  111111111111111111111111

  1111,1111 byte

  1111,1111,1111,1111 char

  0000,0000,0000,0000,1111,1111,1111,1111 int
  最后结果为:65536

  3)int a = 1,b = 2,c = 3;
  if(a > b && c++ > b)

  int a = 1,b = 2,c = 3;
  if(a > b & c++ > b)
两段程序中输出c值,各为多少?(哈哈,这道题我还知道第一个答案c = 3,第二个就蒙了)原来:

&&:逻辑运算符,具有逻辑短路功能(连接的两个条件,如果第一个条件为假,后面的条件不进行运算)
&:位运算符,但可以连接连个条件,但没有短路功能

结果为:第一个c = 3,第二个c = 4

  4)String str1 = ‘a‘ + 3 + "Hello";
     String str2 = "Hello" + ‘a‘ + 3;
  str1,str2输出的结果为多少?(这回不敢大意了,一定有坑,但想了想,不会啊,还是跳坑吧)
其实“+对String类型是做字符串连接操作”,程序员几乎都知道,但“char字符型,存放字符常量,底层使用16位无符号整型表示”注意到的人就少了,这道题的结果为:str1 = 100Hello str2 = Helloa3

  现在就这些,以后有的话再更新,JAVA要注重细节啊啊啊啊啊啊啊啊啊!

时间: 2024-08-16 16:06:01

一些JAVA中有趣的面试题的相关文章

深入了解 Java 中的异常处理 + 面试题

# 深入了解 Java 中的异常处理 + 面试题 在程序开发中,异常处理也是我们经常使用到的模块,只是平常很少去深究异常模块的一些知识点.比如,try-catch 处理要遵循的原则是什么,finally 为什么总是能执行,try-catch 为什么比较消耗程序的执行性能等问题,我们本讲内容都会给出相应的答案,当然还有面试中经常被问到的异常模块的一些面试题,也是我们本篇要讲解的重点内容. 异常处理基础介绍 先来看看异常处理的语法格式: try{ ... } catch(Exception e){

Java中面向对象常见面试题

一.成员变量与局部变量的区别1.在类中位置不同:成员变量:在类中方法外定义.局部变量:在方法声明上或在方法定义中.2.在内存中位置不同:成员变量:堆内存.局部变量:栈内存.3.生存周期不同:成员变量:随着类的加载而加载,随着类的消失而消失.局部变量:随着方法调用而存在,随着方法调用完毕而消失.4.初始化值不同:成员变量:由系统默认初始化.对于成员变量,可以不给初始化值,由系统给,然后显示初始化.局部变量:局部变量在使用之前必须初始化,否则无法使用.二.有一个学生类Student,里面有一些属性,

Java中的常见面试题

1.sleep()和wait()的区别: 两者都可以控制线性进程,阻塞进程.区别是: -----|sleep():释放CPU,不释放资源(锁).可以通过指定时间来使它自动醒来,时间不到只能调用iterreput()来强行打断: -----|wait():释放CPU,释放资源(锁).必须在有锁的前提下才可以使用,也就是同步代码块.同步方法,使用时:锁.wait();

[面试题]java中final finally finalized 的区别是什么?

final 是修饰符,可以用于修饰变量.方法和类.修饰变量时,代表变量不可以修改,也就是常量了,常量需要在定义时赋值或通过构造函数赋值,两者只能选其一:修饰方法时,代表方法只能调用,不能被 override ;修饰类时,代表类不能够派生出子类,所以一个类不能既是 final 又是 abstract; finally 是异常处理机制中的 try 的从句,用于处理必要的清理工作,那怕执行的 catch 中有 return 语句 finally 也会在 return 之前执行: finalized 是

Java中有关构造函数的一道笔试题解析

Java中有关构造函数的一道笔试题解析 1.具体题目如下 下列说法正确的有() A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与class同名 C. constructor在一个对象被new时执行 D.一个class只能定义一个constructor 2.解析说明 (1)class中的构造函数是可以省略的 /** * @Title:User.java * @Package:com.you.user.model * @Descrip

java中‘==’和‘equals()’方法的有趣探索

这两天在看周志明的<深入理解java虚拟机>,受益颇多,根据书中的启示,对java中'=='和'equals()'方法的区别做了一些探索. 首先,为了更快地让进入状态,我们先来所几个判断题,例程如下,请判断各个System.out.println()输出的结果. <pre name="code" class="java"> public static void main(String[] args) { Integer a =1; Integ

ACM试题 - 括号配对问题 - Java中字符串截取和定位问题

ACM试题题源(括号配对问题):http://acm.nyist.net/JudgeOnline/problem.php?pid=2 提交代码: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); String[] ans = new String[n];

一道笔试题来理顺Java中的值传递和引用传递

前段时间参加了一场面试,其中有一道引用传递的题,因为当时并没有考虑清楚所以做错了. 现在来复盘一下,题目如下: private static void change(StringBuffer str11, StringBuffer str12) { str12 = str11; str11 = new StringBuffer("new world"); str12.append("new world");} public static void main(Stri

面试题:Java中对象序列化接口(Serializable)的意义

Serializable接口是一个里面什么都没有的接口 它的源代码是public interface Serializable{},即什么都没有. 如果一个接口里面什么内容都没有,那么这个接口是一个标识接口,比如,一个学生遇到一个问题,排错排了几天也没解决,此时,她举手了(示意我去帮他解决),然后我过去,帮他解决了,那么这个举手其实就是一个标识,自己不能解决的问题标示我去帮他解决,在Java中的这个Serializable接口是给JVM看的,告诉JVM,我不做这个类的序列化了,你(JVM)给我序