String类==与equals常见面试题

1)判断String类型的 s1 和 s2 是否相等

equals() 方法比较的是字符串的内容~所以结果是 true 很好理解,至于 str1==str2  的结果也是 true ,是因为在 Java 的内存的方法区中有一块区域叫做常量池,str1 =“abc” 时,常量池中没有 “abc”,所以就 new 一个 “abc” 当运行 str2 = “abc” 时,常量池中存在 “abc” ,系统就会把 常量池中的 “abc” 的引用直接给 str2 所以 str1==str2 的结果为 true,因为它们的引用是一样的~

2)判断String类型的 s1 和 s2 是否相等

这个和上一题很像,但是 str1 是 new string() ,在 Java 中,new 一个对象就会在内存的堆中开辟一块空间,然后把引用赋值给 str1 ,一个是堆中的引用,一个是常量池中的引用所以,str1==str2 的结果为 false~~

3)判断String类型的 s1 和 s2 是否相等

 

这个 str1==str2 为何为 true 小伙伴们知道吗?嘿嘿因为在Java中有一种叫做常量优化的机制,我们在赋值的时候 “a”,“b”,“c”都是常量,系统及直接把 abc 赋值给 str1 了,这时候常量池中也就存在 “abc” 了,所以str1==str2

4)判断String类型的 s1 和 s2 是否相等

那么这里呢?通过查找API我们可以得到这样一段话~ 『Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换是通过 toString 方法实现的...』

 

也就是说当执行 str3=str1+c 的时候,首先在堆中生成一个StringBuilder(或StringBuffer)对象,然后把 ab 和 c 连接在一起 ,再利用 toString 方法生成一个 “abc”的字符串 再来进行比较..str2 的 “abc” 在常量池中,str3 在堆中所以为false~

原文地址:https://www.cnblogs.com/cmyBlog/p/9796896.html

时间: 2024-10-18 21:16:25

String类==与equals常见面试题的相关文章

java常见面试题——java笔试题总结

注:本文转载自http://www.cnblogs.com/huajiezh/p/5790928.html,版权归其所有! Java常见面试题总结 一.Java基础 1.String类为什么是final的. 2.HashMap的源码,实现原理,底层结构. 3.说说你知道的几个Java集合类:list.set.queue.map实现类咯... 4.描述一下ArrayList和LinkedList各自实现和区别 5.Java中的队列都有哪些,有什么区别. 6.反射中,Class.forName和cl

JDBC常见面试题

以下我是归纳的JDBC知识点图: 图上的知识点都可以在我其他的文章内找到相应内容. JDBC常见面试题 JDBC操作数据库的步骤 ? JDBC操作数据库的步骤 ? 注册数据库驱动. 建立数据库连接. 创建一个Statement. 执行SQL语句. 处理结果集. 关闭数据库连接 代码如下: Connection connection = null; Statement statement = null; ResultSet resultSet = null; try { /* * 加载驱动有两种方

JAVA常见面试题及解答-java开发

JAVA常见面试题及解答 Java的垃圾回收总结  浅谈Java中的内部类 1)transient和volatile是java关键字吗? 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.例如: class T { transient int a;  //不需要维持 int b;  //需要维持 } 这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存. volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变.在多

JDBC常见面试题集锦

什么是JDBC,在什么时候会用到它? JDBC的全称是Java DataBase Connection,也就是Java数据库连接,我们可以用它来操作关系型数据库.JDBC接口及相关类在java.sql包和javax.sql包里.我们可以用它来连接数据库,执行SQL查询,存储过程,并处理返回的结果. JDBC接口让Java程序和JDBC驱动实现了松耦合,使得切换不同的数据库变得更加简单. 有哪些不同类型的JDBC驱动? 有四类JDBC驱动.和数据库进行交互的Java程序分成两个部分,一部分是JDB

JAVA的基本数据类型以及常见面试题

一.JAVA基本数据类型介绍 基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型.它们是我们编程中使用最频繁的类型,因此面试题中也总少不了它们的身影,在这篇文章中我们将 从面试中常考的. 几个方面来回顾一下与基本类型相关的知识. 基本类型共有八种,它们分别都有相对应的包装类.关于它们的详细信息请看下表: 基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte.short.int.long.float.double.数值类型又可以分为整数类型byte. shor

【转载】JAVA常见面试题及解答(精华)

JAVA常见面试题及解答(精华) 1)transient和volatile是java关键字吗?(瞬联) 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.例如: class T { transient int a;  //不需要维持 int b;  //需要维持 } 这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存. volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变.在多线程程序中,有时两个或更多的线程共

PHP常见面试题汇总(二)

PHP常见面试题汇总(二) //第51题:统计一维数组中所有值出现的次数?返回一个数组,其元素的键名是原数组的值;键值是该值在原数组中出现的次数 $array=array(4,5,1,2,3,1,2,"a","a"); $ac=array_count_values($array); /** * 输出结果: * Array( *   [4] => 1 *   [5] => 1 *   [1] => 2 *   [2] => 2 *   [3] 

献给 2018 还在艰苦奋斗的 Java 程序员,Java 常见面试题及答案!

1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被编译成能被 Java 虚拟机执行的字节码文件. Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译. Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性. 2.JDK和JRE的区别是什么? JDK: java开发工具包,包含了JRE.编译器和其它工具(如:jav

redis知识点及常见面试题

redis知识点及常见面试题 参考: https://zm8.sm-tc.cn/?src=l4uLj4zF0NCIiIjRnJGdk5CYjNGckJLQrIqNiZaJnpOWjIvQno2LlpyTmo zQx87OxsfGztGXi5KT&uid=c9712557c9cde8bef666f89d1d708c67&hid=40c90f91312807e0fc0320b8ae fa07f7&pos=2&cid=9&time=1532475858864&fr