第一章 关于String的一些

  • ==与equals()
  • equals()与hashCode
  • equals()与intern()
  • StringBuilder.append()与String的“+”

1.==比较2个内存单元的内容是否一样。基本类型如byte,int,char等就是直接比较它们的值。引用类型比较引用的值,即对象的逻辑地址,比较引用的2个对象是否为同一个对象。
2.equals方法在Object类中定义,其设计的初衷就是为了子类去重写它,如果子类没有重写则等同与==。
重写equals方法的目的是为了根据实际的目的来比较2个对象,很多时候来判断2个对象是否一致并不需要完全相同,只要根据需要的属性比较即可判断相似性。比如String类重写了equals方法,2个字符串对象内容相同则为true.

3.hashCode方法是为了算法快速定位数据而存在,equals则是为了比较值。要理解hashCode方法,要知道算法操作的其实是数字,hashCode方法将对象标识为数字对象进而能进行算法运算,Java中的许多集合操作则建立在这个基础之上。理解了散列表,对于理解hashCode方法就容易了,hashmap也是一个道理,不同对象可能产生相同的hash值,这取决于方法的实现,应当尽量将hash值分散提高效率。

4.intern方法调用时,jvm会在常量池中通过equals方法查找是否存在等值的String,存在则直接返回这个对象地址,没有则创建这个等值的字符串再返回这个新建的地址。什么地方可能用到intern方法呢?比如有一些固定的字符串要经常比较,像数据库的数据类型,当要检测每个表的列的类型时,可以以intern方式直接放到常量池,在后面的比较中就不用equals了,直接==比较。

5.关于+和StringBuilder.append两种字符串拼接方式的说法有很多,但是性能好坏要具体实际情况分析,在拼接过程中,将扩容的消耗降到最低就是比较好的方法了。

+拼接字符串会产生新的StringBuilder对象,最后再调用toString方法返回String对象,在拼接的过程中,除了新对象所占有的内存外,还要考虑StringBuilder对象扩容所消耗的内存,考虑这样一种情况,在循环体没拼接字符串,就会产生许多的对象,大量内存空间被占用,导致频繁的GC。

时间: 2024-08-24 10:03:58

第一章 关于String的一些的相关文章

实体框架6.0(Recipes)翻译系列 1 -----第一章 开始使用实体框架1

微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF版本更新太快,没人愿意去花时间翻译国外关于EF的书籍.使用Entity Framework开发已经有3年多了,但用得很肤浅,最近想深入学习,只好找来英文书<Entity Framework 6 Recipes>慢慢啃.首先需要说明的是,我英文不好,只是为了学习EF.把学习的过程写成博客,一是督促自

c语言程序设计第一章3

字符数组是C语言中最常用的数组类型.下面我们通过编写一个程序,来说明字符数组以反操作字符数组的函数的用法.该程序读入一组文本行,并把最长的文水行打印出来.该算法的基本框架非常简单: while (还有未处理的行) i f (该行比已处理的最长行还要长) 保存该行 保存该行的长度 打印最长的行 1 #include <stdio.h> 2 #include <stdlib.h> 3 #define MAXLENGTH 100//文本的最大长度 4 int getline(char l

大道至简第一章读后感(java伪代码)

大道至简第一章用Java伪代码编写第一次写,难免有错误,欢迎指正和指导 //1 愚公移山public class yishan{public static void main(String[]args){while(山还在){扣石垦壤,箕畚运于渤海之尾:if(愚公死&&子孙存在)愚公=愚公儿子: //有子复焉,子又生孙,孙又生子else if(愚公死&&无子孙)//考虑没有子孙的情况break: }if(山平)System.out.println("山已平,指通豫

《大道至简》第一章JAVA语言伪代码

第一章写了编程的精义详细写出了编程是简单的.举愚公移山的例子,既写出了我们中华文化源远流长,博大精深,千百年前就有了编程的思想,也引出了结构概念,虽我之死,有 存焉",这里描述了可能存在的分支结构,即"IF"条件判断,以及子子孙孙无穷匮也等循环结构,等编程思想.关于我会不会写程序的问题书里面也做了详细介绍!除了先天智障或后天懒惰者,都是可以学会写程序的,也许会给学编程的学生增加了很大的信心. 下面是源代码................... import.java.大道至简

《大道至简》第一章读后感,java伪代码形式

import java.大道至简.*; import  java.io.*; import.java.愚公移山.*; public class YuGongYiShan { public static void main(String [] args) throws IOException { int  愚公: int  子孙: int 山=1: while(山==1&&山不增加) { if(愚公死) {有子存焉,子孙去完成移山的任务,何苦而不平,这个工程必定会实现:} else {愚公自

Java学习记录第一章

学习Java第一章的记录,这一章主要记录的是Java的最基础部分的了解知识,了解Java的特性和开发环境还有Java语言的优缺点. 计算机语言的发展大概过程:机器语言--->汇编语言--->高级语言(面向过程的语言和面向对象的语言)总而言之就是从人类比较难识别的字符串向人类自然语言靠近使代码的可读性越来越高. Java的发展过程:1991年Sun公司为了抢占市场先机,成立了一个称为Green的项目小组,帕特里克.詹姆斯·高斯林.麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚州门洛帕

《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述 (转)

微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF版本更新太快,没人愿意去花时间翻译国外关于EF的书籍.使用Entity Framework开发已经有3年多了,但用得很肤浅,最近想深入学习,只好找来英文书<Entity Framework 6 Recipes>第二版,慢慢啃.首先需要说明的是,我英文不好,只是为了学习EF.把学习的过程写成博客,一

《Hadoop权威指南》笔记 第一章&第二章

? ? ? ? ? ? ? ? ? ? ? ? ? ? 使用MapReduce ? ? ? ? ? ? ? ? import java.io.IOException; // 是hadoop针对流处理优化的类型 import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; // 会继承这个基类 import org.apache

Ruby学习-第一章

第一章 字符串,数字,类和对象 为了证明Ruby真的好用,hello world也能写的如此简洁: puts 'hello world' 1.输入/输出 print('Enter your name') name=gets() puts("Hello #{name}") 注:Ruby是区分大小写的 2.String类 puts("Hello #{name}")中的变量 name是内嵌在整个String里的,通过 #{ } 包裹进行内嵌求值,并用双引号"&q