首页 > 其他分享 >常见面试题1

常见面试题1

时间:2023-10-06 23:11:09浏览次数:26  
标签:面试题 常见 String 对象 Object 数据类型 equals true

一、==和equals的区别

== 对于基本类型和引用类型的作用效果是不同的:

• 对于基本数据类型来说,== 比较的是值。

• 对于引用数据类型来说,== 比较的是对象的内存地址。

因为 Java 只有值传递,所以,对于 == 来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引用类型变量存的值是对象的地址。

equals()不能用于判断基本数据类型的变量,只能用来判断两个对象是否相等。equals()方法存在于Object类中,而Object类是所有类的直接或间接父类,因此所有的类都有equals()方法。

Object类equals()` 方法:

public boolean equals(Object obj) {

return (this == obj);

}

equals() 方法存在两种使用情况:

• 类没有重写 equals()方法 :通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象,使用的默认是 Object类equals()方法。

• 类重写了 equals()方法 :一般我们都重写 equals()方法来比较两个对象中的属性是否相等;若它们的属性相等,则返回 true(即,认为这两个对象相等)。

举个例子(这里只是为了举例。实际上,你按照下面这种写法的话,像 IDEA 这种比较智能的 IDE 都会提示你将 == 换成 equals() ):

String a = new String("ab"); // a 为一个引用

String b = new String("ab"); // b为另一个引用,对象的内容一样

String aa = "ab"; // 放在常量池中

String bb = "ab"; // 从常量池中查找

System.out.println(aa == bb);// true

System.out.println(a == b);// false

System.out.println(a.equals(b));// true

System.out.println(42 == 42.0);// true

String 中的 equals 方法是被重写过的,因为 Object 的 equals 方法是比较的对象的内存地址,而 String 的 equals 方法比较的是对象的值。

当创建 String 类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个 String 对象。

String类equals()方法:

public boolean equals(Object anObject) {

if (this == anObject) {

return true;

}

if (anObject instanceof String) {

String anotherString = (String)anObject;

int n = value.length;

if (n == anotherString.value.length) {

char v1[] = value;

char v2[] = anotherString.value;

int i = 0;

while (n-- != 0) {

if (v1[i] != v2[i])

return false;

i++;

}

return true;

}

}

return false;

}
————————————————
版权声明:本文为CSDN博主「姜小白程序」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_59281987/article/details/128408175

标签:面试题,常见,String,对象,Object,数据类型,equals,true
From: https://www.cnblogs.com/tianrui67/p/17745248.html

相关文章

  • 【TinyWebServer】13踩坑和面试题
    踩坑在此项目中遇到的一些比较有意义的问题大文件传输先看下游双书上发送逻辑这块的代码,发送数据只调用了writev函数,并对其返回值是否异常做了处理。boolhttp_conn::write(){ inttemp=0; intbyte_have_send=0; intbyte_to_send=m_write_idx; if(byte_to_......
  • 常见的开源软件许可证(License)
    常见的开源软件许可证(License)软件许可证(softwarelicense)是一种格式合同,由软件作者与用户签订,用以规定和限制软件用户使用软件或其源代码的权利,以及作者应尽的义务License受到《合同法》的保护开源的定义开放源代码促进会(OpenSourceInitiative-OSI),提出开源需要满足......
  • 常见的 React 知识
           ......
  • 常见的C语言执行效率优化方法
    C语言之心效率优化写代码时考虑代码的执行效率是一个好习惯,嵌入式开发多年,让自己养成了这样的习惯。优化C语言代码的执行效率是一项重要的任务,可以通过多种方法和注意事项来实现。下面列出了一些常用的方法和注意事项,并结合具体实例进行详细讲解:选择合适的数据结构使用合适的数......
  • 面试题:Redis和MySQL的事务区别是什么?
    大家好,我是小米!今天我要和大家聊聊一个在技术面试中经常被问到的问题:“Redis和MySQL的事务区别是什么?”这个问题看似简单,但实际上涉及到了数据库和缓存两个不同领域的知识,让我们一起来深入了解一下吧!什么是事务?首先,我们需要明确什么是事务。事务是数据库中的一个重要概念,它是一组数......
  • 大数据面试题:MapReduce压缩方式
    可回答:1)Hadoop常见的压缩算法有哪些?问过的一些公司:网易云音乐(2022.11),阿里(2020.08)参考答案:1、MapReduce支持的压缩方式压缩格式hadoop自带?算法文件扩展名是否可切分换成压缩格式后,原来的程序是否需要修改DEFLATE是,直接使用DEFLATE.deflate否和文本处理一样,不需要修改Gzip是,直接......
  • Linux常见面试题,应对面试分享
    操作系统基础1.cpu占⽤率太⾼了怎么办?排查思路是什么,怎么定位这个问题,处理流程其他程序:1.通过top命令按照CPU使⽤率排序找出占⽤资源最⾼的进程2.lsof查看这个进程在使⽤什么⽂件或者有哪些线程3.询问开发或者⽼⼤,是什么业务在使⽤这个进程4.是否可以将这台机器隔离,不影响......
  • http常见状态码
    一、1开头的状态码(信息类)   100,接受的请求正在处理,信息类状态码二、2开头的状态码(成功类)   2xx(成功)表示成功处理了请求的状态码   200(成功)服务器已成功处理了请求。三、3开头的状态码(重定向)   3xx(重定向)表示要完成请求,需要进一步操作。通常这些......
  • Java 中常见类型的流
    Java中的流(Stream)分为两种类型:字节流和字符流。   字节流(ByteStream)字节流可以处理任何类型的数据,但是它们是以字节为单位进行操作的。Java中提供了两种字节流:InputStream和OutputStream。InputStream是字节输入流,用于从数据源读取数据。InputStream的常用子类包括:  ......
  • 43.227.223.x常见的网络攻击之一cc攻击&防护手段!
    HTTPFlood俗称CC攻击(ChallengeCollapsar)是DDOS(分布式拒绝服务)的一种,相比其它的DDoS攻击CC似乎更有技术含量一些。这种攻击你见不到虚假IP,见不到特别大的异常流量,但造成服务器无法进行正常连接,一条ADSL的普通用户足以挂掉一台高性能的Web服务器。由此可见其危害性,称其为“Web杀......