java string ==和equals的使用

 1 package com.example.base.string;
 2
 3 public class MyStringTest {
 4
 5     public static void main(String args[]) {
 6         testString();
 7     }
 8
 9     private static void testString() {
10         String hello = "Hello";
11         String hello2 = new String("Hello");
12         String lo = "lo";
13         //false. ==比较的是引用.hello是一个字符串常量表达式,并实现为调用interned,以共享不同的示例(string pool)
14         //hello2是一个对象,指向的是堆上的一个地址
15         System.out.println(hello == hello2);            //false
16         //true. equals比较的是两个对象的值
17         System.out.println(hello.equals(hello2));       //true
18         //true. intern()会检查当前字符串池是否包含这个字符串。包含则返回池中的字符串,否则将字符串对象添加到池中,并返回该字符串对象的引用
19         //(最终结果就是返回一个指向常量池字符串的引用)
20         System.out.println(hello == hello2.intern());   //true
21         //true. 两个都是常量表达式(编译时确定的),都是指向字符串池的引用
22         System.out.println(hello == "Hello");           //true
23         //true. 不同类下的两个常量表达式,依然是指向同一个字符串池的引用
24         System.out.println(Other.hello == hello);       //true
25         //true. 不同包下的两个常量表达式,依然是指向同一个字符串池的引用
26         //System.out.println(com.example.base.string.other.Other.hello == hello);     //true
27         //true. 两个都是常量表达式,都是指向字符串池的引用
28         System.out.println(hello == ("Hel" + "lo"));    //true
29         //false.  后者不是常量表达式,是运行时通过串联计算的字符串(lo是一个对象,不是常亮"xxx"),会新建对象
30         System.out.println(hello == ("Hel" + lo));      //false
31         //true. 将新对象intern()会返回指向字符串池的引用
32         System.out.println(hello == ("Hel" + lo).intern());     //true
33     }
34 }
35 class Other {
36     static String hello = "Hello";
37 }

原文地址:https://www.cnblogs.com/gc65/p/java.html

时间: 2024-10-15 19:30:34

java string ==和equals的使用的相关文章

java String的equals,intern方法(转载)

JAVA中的equals和==的区别 ==比较的是2个对象的地址,而equals比较的是2个对象的内容. 显然,当equals为true时,==不一定为true: 基础知识的重要性,希望引起大家的重视,包括自己在内 很多困惑和疑问而且均来自于最基础的知识 折腾了一阵子又查了查书,终于对 String 这个特殊的对象有了点感悟 public class TestString { public static void main(String[] args) { String s1 = "Monday

Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0

课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str="Hello";  推荐这种 使用关键字new  String str1=new String("Hello"); 在内存中开辟2个空间 如图: 源代码 StringDemo01.java 2.String内容的比较 String str="Hello"

java:String使用equals和==比较的区别

"=="操作符的作用 1.用于基本数据类型的比较 2.判断引用是否指向堆内存的同一块地址. equals所在位置: 在Object类当中,而Object是所有类的父类,包含在jdk里面,但并不适合绝大多数场景,通常需要重写 public boolean equals(Object obj) { return (this == obj); } equals的作用: 用于判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同,返回值为布尔类型 equals的基本使用: boolean

关于java的String的equals()

一直以为String的equals()是百分百准确能判断字符串是否相等的,直到今天遇到的情况: String value = 从properties文件取得的值. idea的debug看value="server" 然后if("client".equals(value)){ sout("hello"); } 竟然真的判断client跟server两字符串相等.... 闹了半天, String tempValue = String.valueOf(

java String 类 基础笔记

字符串是一个特殊的对象. 字符串一旦初始化就不可以被改变. String s = "abc";//存放于字符串常量池,产生1个对象 String s1=new String("abc");//堆内存中new创建了一个String对象,产生2个对象 String类中的equals比较字符串中的内容. 常用方法: 一:获取 1.获取字符串中字符的个数(长度):length();方法. 2.根据位置获取字符:charAt(int index); 3.根据字符获取在字符串中

看Java中==、equals、hashCode的来龙去脉

我有一个哥们去参加了面试,面试官这样问一个Java问题: 你说一下java对象的equals方法调用什么方法呢?我这个哥们想了想,回答说"应该是比较的引用".听了这个答案之后,那个面试官摇头晃脑的说:"不对,你回答的不对,equals方法调用的是hashCode方法".于是乎,我那个技术还不错的哥们就悲壮地栽在这道题目上了. 今天晚上,西安历史上少有的热,那就好好总结一下这个题目的来龙去脉好了,也方便给后面的朋友们提个醒,不要栽在这么简单的问题上.你说这个面试官回答

【转】浅谈Java中的equals和==

浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初

Java 中的 ==, equals 与 hashCode 的区别与联系

一.概述 1.概念 == : 该操作符生成的是一个boolean结果,它计算的是操作数的值之间的关系 equals : Object 的 实例方法,比较两个对象的content是否相同 hashCode : Object 的 native方法 , 获取对象的哈希值,用于确定该对象在哈希表中的索引位置,它实际上是一个int型整数 二.关系操作符 == 1.操作数的值 基本数据类型变量 在Java中有八种基本数据类型: 浮点型:float(4 byte), double(8 byte) 整型:byt

浅谈java对象的equals方法

作为一个被问的很多的一个面试题:java中==和equals有什么区别? 网上普遍的回答都是:==比较的是内存地址,equals比较的是值. 其实这种回答是很不标准的,稍微标准一点的回答应该JDK自带的一些类对equals的实现各不同,例如 Object对象的equals的定义是这样的: public boolean equals(Object obj) { return (this == obj); } 所以在Object中==和equals是没有任何区别的. 但在String中,重写的equ