Java String的== 与 equals小结

时间:2021-12-07 11:49:26
package hashcode;

public class LearnString {

	public static void main(String[] args) {
//1.先在栈中创建一个对String类的对象引用变量str
//2.然后查找堆中常量池(内存中以表存在)里有没有存放"abc"
//3.如果没有,则将"abc"存放进常量池,并令str指向”abc”
//4.如果已经有"abc"则直接令str指向“abc”。
String str1 = "abcdefg";//在编译期时就确定了
//1. 首先在堆(不是常量池)中创建一个包含指定内容的字符串对象,并将字符串引用指向该对象。
//2. 去字符串常量池中查看,是否有包含该内容的对象。
//3. 若有,则将new出来的字符串对象与字符串常量池中内容相同的对象联系起来。
//4. 若没有,则在字符串常量池中再创建一个包含该内容的字符串对象,并将堆中的对象与字符串常量池中新创建出来的对象联系起来。
//5.栈中的str2总是指向的是堆中的String对象
String str2 = new String("abcdefg");
// 1.== 比较的是地址
System.out.println(str1 == str2);// false
// 2.String重写了Object的equals().
System.out.println(str1.equals(str2));// true
// 3.java规定,equals()相等,hashcode必须相同,所以String也重写了Object的hashcode(),不然可能有bug.
System.out.println(str1.hashCode()==str2.hashCode());//true
str2=str2.intern();
//String intern()为每个字符序列生成唯一的String引用
System.out.println(str1==str2);//true
String str3="abc"+"defg";
System.out.println("str3:"+(str1==str3));//true 只是因为在编译期,自动优化为abcdefg } }
//在Object中equals(),hashcode().使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用
public boolean equals(Object obj) {
return (this == obj);
} public native int hashCode();

  

//String中重写的equals(),hashcode
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;
}
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value; for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}

  

Java String的== 与 equals小结的更多相关文章

  1. Java String字符串&sol;&equals;&equals;和equals区别&comma;str。toCharAt&lpar;&rpar;&comma;getBytes&comma;indexOf过滤存在字符,trim&lpar;&rpar;&sol;String与StringBuffer多线程安全&sol;StringBuilder单线程—— 14&period;0

    课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str=& ...

  2. Java String 类的 equals 和 &equals;&equals;

    public class Test_String { public static void main(String[] args) { String a = new String("aa&q ...

  3. Java String&period;indexOf&lpar;&rpar; 函数用法小结

    1. indexOf的参数是 String,  startIndex: Number; indexOf的返回值为int, 2. Function indexOf 包含如下几个格式:1). Strng. ...

  4. Java String 的equals&comma; &equals;&equals; &comma; hascode的区别

    1.equals 和 == ==在java中是比较引用的,即在内存中的地址.而String的equals()是比较字符串的内容 http://blog.csdn.net/barryhappy/arti ...

  5. Java String 字符串操作小结

    // 转载加编辑 -- 21 Apr 2014 1. Java字符串中子串的查找 Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现 ...

  6. Java中String推断相等equals与&equals;&equals;的差别以及StringBuilder的equals

    Java中String类型具有一个equals的方法能够用于推断两种字符串是否相等,可是这样的相等又与运算符==所推断的"相等"有所不同,接下来进行分析,结论由程序进行验证 Str ...

  7. java中String的&equals;&equals;和equals的区别

    首先看代码1: public static void main(String[] args) { List<String> list=new ArrayList<String> ...

  8. Java——String对象

    前言 实际上任何语言都没有提供字符串这个概念,而是使用字符数组来描述字符串.Java里面严格来说也是没有字符串的,在所有的开发里面字符串的应用有很多,于是Java为了应对便创建了String类这个字符 ...

  9. 从Java的堆栈到Equals和&equals;&equals;的比較

    认识Java中堆和栈 栈与堆都是Java用来在Ram中存放数据的地方. 与C++不同.Java自己主动管理栈和堆,程序猿不能直接地设置栈或堆. Java的堆是一个执行时数据区,类的对象从中分配空间.这 ...

随机推荐

  1. &lbrack;Maven&rsqb;Maven安装简述

    maven安装简述 1检查jdk安装 1.1cmd输入echo %JAVA_HOME%检查JAVA_HOME是否指向了正确的jdk安装目录 1.2cmd输入java-version检查window是否 ...

  2. 原创:SAP LVC ALV编辑小技巧

    前两天有个打印需求变更,需要在ALV显示列表中添加两个字段,可编辑,而我自己用的是函数:REUSE_ALV_GRID_DISPLAY_LVC 因为之前做可编辑基本都是固定套路,定义类,画屏幕.... ...

  3. UVa 11464 - Even Parity

    解题报告:题目大意有一个N×N的矩阵,矩阵中的元素只有1或0,如果说对于一个矩阵,它的所有的点的上下左右的点的和是偶数,则称这个矩阵为偶数矩阵,现在给你一个任意的矩阵,要求的是如果要把这个矩阵变成偶数 ...

  4. ylbtech-LanguageSamples-XMLdoc

    ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-XMLdoc 1.A,示例(Sample) 返回顶部 “XML 文档”示例 本示例演示如 ...

  5. cocos2d-x jsbinding 资源下载实现

    cocos2dx没有直接给出资源下载的api,可能是因为资源的管理每个项目的需求不太一样,所以完整的资源下载功能需要我们自己去实现. 资源下载分为两部分,一部分是资源请求,另一部分是资源文件写入.资源 ...

  6. git遇到的问题解决方案

    问题1: The requested URL returned error: 401 Unauthorized while accessing? 问题原因: 1.无法访问是因为你将项目设置为私人的,所 ...

  7. vert&period;x 学习笔记

    Verticle 一个verticle是部署在Vert.x.单位 每个verticle包含启动它的主要手段. 一个应用程序可以是单个verticle或者可以由与彼此经由事件总线通信的多个verticl ...

  8. inno安装客户端,写注册表url调用客户端

    [Registry] Root: HKCR; SubKey: xxx; ValueData: "xxx"; ValueType: string; Flags: CreateValu ...

  9. WPF 的 数据源属性 和 数据源

    (一)数据源(数据对象)属性 :path 或  path的值(path=VM.Property或M.Property),通常具有通知功能(特例除外). (二)path不能孤立而存在,它一定具有所归属的 ...

  10. MyBatis -01- 初识 MyBatis &plus; MyBatis 环境搭建

    MyBatis -01- 初识 MyBatis + MyBatis 环境搭建 MyBatis 本是 apache 的一个开源项目 iBatis(iBATIS = "internet&quot ...