String str1 = “abc“与String Str2 = new String(“abcd“)

编程入门 行业动态 更新时间:2024-10-26 07:38:33

<a href=https://www.elefans.com/category/jswz/34/1769667.html style=String str1 = “abc“与String Str2 = new String(“abcd“)"/>

String str1 = “abc“与String Str2 = new String(“abcd“)

  1. 用第一种创建字符串时,会在java编译期间,先在常量池中查找是否存在abc,若不存在就会新建abc放到常量池中反之就直接指向即可,然后变量str1会指向常量池中abc;
  2. 用第二种创建字符串时,在编译期间会先在堆中new一个对象,然后在常量池中查找是否存在abcd,若不存在就会新建并放到常量池中,str2的值就是指向这个对象。

equals与==

  1. String类重写了equals方法,可以通过源码可以看出,重写的equals方法先使用“==”判断比较的两个对象是否是否相同,相同就返回true,否者就再比较两个字符串的值否相等,相等就返回true否者返回false。
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;}
  1. == 在比较数值时就是直接比较两个数值是否相等;在比较对象时比较两个变量指向的是否是同一个对象地址。

字符串的的hashCode方法,字符串的hashCode值就是每个字符的ascll码加前一个字符的hash*31的和。

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;}

Object的hashCode是使用原生的方法

public native int hashCode();

自己的总结,仅仅提供参考,有错误请给我纠正,谢谢。

更多推荐

String str1 = “abc“与String Str2 = new String(“abcd“)

本文发布于:2024-02-25 11:41:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1698861.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:String   abc   abcd

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!