当前位置: 首页 > news >正文

有趣的java面试题-基础篇(一)

一、 运算符 &和&&、|和||的区别

 & 按位与操作 只有对应的两个二进制数为1时,结果位才为1
    1&1 = 1
    1&0 = 0
    0&1 = 0
    0&0 = 0
 | 按位或操作 有一个为1的时候,结果位就为1
    1|1 = 1
    1|0 = 1
    0|1 = 1
    0|0 = 0

​&&和||称之为短路运算符

1、& 和 && 都可以实现 和 这个功能
        区别:& 两边都运算,而 && 先算 && 左侧,若左侧为false 那么右侧就不运算,判断语句中推荐使用 &&,效率更高
2、| 和 || 和上面类似
        区别:||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断
在以下判断中,如果只使用 & 或者 | 会出现运行异常

空指针异常
String s = null;
if(null != s & s.equals(""))
如果使用 && 的话,当第一个条件满足时,就直接判定为false 第二个条件不会执行,程序则正常运行。

二、用最有效率的方法计算2乘以8

这里涉及到计算机基础知识 位运算符 << 左移 和 >> 右移 。

答案:2<<3

原理:将一个数左移n位,相当于乘以2的n次方,位运算是CPU直接支持的,所以效率高
常见的JDK源码里面HashMap的默认容量16


直接是二进制操作了,表示1左移4位,变成10000,转为10进制也就是16, 直接以二进制形式去运行,效率更高

 相反将一个数右移n位,相当于除以2的n次方

 三、传递两个非0的int数值进去,实现变量交换的方式,有几种方式?

方式一
 public static void test(int a, int b){
​        System.out.printf("a=%d, b=%d",a,b);
        a = a + b;
        b = a - b ;
        a = a - b;
        System.out.printf("\na=%d, b=%d",a,b);
    }
方式二 异或运算 (一个数与另一个数异或两次是其本身, 一个数和自身异或结果是0 )
 public static void test2(int a, int b){
     System.out.printf("a=%d, b=%d",a,b);​
     a = a^b;   // a1 = a^b
     b = b^a;   // b = b^a^b
     a = a^b;   // a = a1^b = a^b^a​
     System.out.printf("\na=%d, b=%d",a,b);
 }
 

四、java数据类型分类

8种基础数据类型:byte、short、int、long、float、double、char、boolean
引用数据类型:除8种数据类型外其他都是引用类型
String和Enum也是引用类型

五、++ --运算符

int i = 5;
return i++; 和 return ++i; 返回结果是什么?

第一个先返回后运行++ 所以返回5, 第二个先运算后返回 所以返回6.

六、== 和equals的区别

8个基本数据类型比较 要用 == 判断是否相等
引用数据类型: == 比较的是内存地址是否一样,不同对象的内存地址不一样,equals本质上也是==,

 但String类重写了equals方法,把内容拆成char类型的数组,先比较长度,如果相同,再逐个比较内容,如果完全相同返回true。

 开发者也可以自己重写equals方法去定义什么条件去判断两个对象是否一样。

相关文章:

  • 用Windows性能监视器分析网站运行状况
  • Ubuntu 安装 GDAL C++库
  • 文件中的关键字与对应的协议
  • 应对反爬虫策略分享
  • 专利申请预审需要满足什么条件?
  • HTML5新特性 day_04(8.10)地图、文件上传
  • Junit5 + YAML 轻松实现参数化和数据驱动(一)
  • 用ARM进行汇编语言编程(1)介绍与寻址模式
  • PostwomanApi接口测试工具
  • 如何将数据输入神经网络,神经网络的数据处理
  • 数据结构-红黑树
  • 2022年下半年软考报名时间汇总,最新版!
  • Div4 思维总结
  • Docker面试题库
  • java毕业设计成品源码网站javaweb企业财务|记账|账单管理系统
  • ----------
  • php的引用
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • JavaScript对象详解
  • magento 货币换算
  • mysql 5.6 原生Online DDL解析
  • Octave 入门
  • Python进阶细节
  • Vue 2.3、2.4 知识点小结
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 转载:[译] 内容加速黑科技趣谈
  • Mac 上flink的安装与启动
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 我们雇佣了一只大猴子...
  • ​​​​​​​​​​​​​​Γ函数
  • ​2021半年盘点,不想你错过的重磅新书
  • ​io --- 处理流的核心工具​
  • !!Dom4j 学习笔记
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #Ubuntu(修改root信息)
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (四) Graphivz 颜色选择
  • (转)linux 命令大全
  • (转载)Linux 多线程条件变量同步
  • . Flume面试题
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .Net CoreRabbitMQ消息存储可靠机制
  • .Net6 Api Swagger配置
  • .NET业务框架的构建
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • [145] 二叉树的后序遍历 js
  • [AIGC] 如何建立和优化你的工作流?
  • [Android] Amazon 的 android 音视频开发文档
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务