"==" 是比较的是两个对象的内存地址,而equals方法默认情况下是比较两个对象的内存地址.

1.String str = "hello"  生成的字符串,首先是去检查字符串常量池中是否已经存在了这个"hello" ,若存在,就不会再创建一个新的"hello",直接返回常量池中的这个字符串地址,若不存在,那么就在字符串常量池中加入这个字符串.字符串常量池,存在于方法区中.

2.String str =  new String("hello"),首先是在常量池中寻找是否存在这个字符串,存在则不再建立,若不存在,则建立,之后复制一份到堆内存中!在堆内存中new一个字符串,当然如果再new一个字符串,那么他们的内存地址是不同的.但是对于new出来的字符串,利用equals的时候,他们是相同的,原因是String 中重写equals的方法中,是利用字符串转为char 数组来对每一个char进行比较,最后得出去true 或者 false.     new String 一共创建两次这个对象.一个在常量池,一个在堆内存中!

3.字符串比较技巧:

  利用"中国".equals(str) ,用常量equals,防止发生空指针异常.方法调用不为空......变量调用方法的时候不能为NULL,不然会出现空指针异常!

4.字节数组,字符数组 与 String 的转换

    str.getBytes() , str.toCharArray()    转换为字节数组和字符数组

5.split("-") 分隔符获取字符串内容

6.subString (startindex , endindex)    一般都是包头不包尾,所以需要endindex加一,这样才切割完整

7.StringBuffer 问题: 默认的构造方法是16字符,如果添加超过了16字符,那就自动增长一倍.  已经被StringBuilder代替

  String 是一开始就建立的是常量,所以不建议经常修改!如果需要频繁修改字符串内容,建议使用字符串缓冲类.是用来存储String的容器,增删查改非常方便.

  利用append 方法添加.

  sb.reverse()   调换

8.StringBuffer 是线程安全的 (操作效率不高),  StringBuilder (操作效率高) 非线程安全,但比前快.

  推荐使用 StringBuilder   因为操作效率高!

  

  

  

Java 字符串比较,String 中的一些方法 == 和 equals 的详解的更多相关文章

  1. java字符串的替换replace、replaceAll、replaceFirst的区别详解

    如果不是刚刚复习了下正则表达式,我可能也不会注意到,原来String的replaceAll跟replaceFirst用到了正则表达式! 不多解释,看代码: String s = "my.te ...

  2. JAVA字符串格式化String.format()的使用

    JAVA字符串格式化-String.format()的使用常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprin ...

  3. JAVA字符串格式化-String.format()的使用 【生成随机数补0操作】

    转: JAVA字符串格式化-String.format()的使用 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的s ...

  4. String中的“equal方法”和“==”

    二话不说,先来说下重写的事情: 在Java中,String .Math.还有Integer.Double....等这些封装类重写了Object中的equals()方法,让它不再比较其对象在内存中的地址 ...

  5. java字符串大小写转换的两种方法

    转载自:飞扬青春sina blogjava字符串大小写转换的两种方法 import java.io..* public class convertToPrintString {          pu ...

  6. java 执行 jar 包中的 main 方法

    java 执行 jar 包中的 main 方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar执行后总是运行指定的主方法,如果 jar 中有多 ...

  7. JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

  8. java 流操作对文件的分割和合并的实例详解_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 java 流操作对文件的分割和合并的实例详解 学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并. 下面是代 ...

  9. 《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)

    1.简介 为了方便查看和归档:(1)不同包的日志可能要放到不同的文件中,如service层和dao层的日志:(2)不同日志级别:调试.信息.警告和错误等也要分文件输出.所以宏哥今天主要介绍和分享的是: ...

随机推荐

  1. Webservice WCF WebApi

    注明:改编加组合 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下,你有很多的选择来构建一个HTTP Service ...

  2. noip 2016 提高组题解

    前几天写的那个纯属搞笑.(额,好吧,其实这个也不怎么正经) 就先说说day2吧: T1:这个东西应该叫做数论吧. 然而我一看到就照着样例在纸上推了大半天(然而还是没有看出来这东西是个杨辉三角) 然后就 ...

  3. NYOJ-1057 寻找最大数(三)(贪心)

    寻找最大数(三) 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数. 求这个新的整数的 ...

  4. 【实验室笔记】C#以本地时间创建txt文件

    前段时间做的一个小项目,要求上位机在打开时候,以打开软件的系统时间的建立一个txt文件来存储下位机发送来的数据. 在第一版上位机上,取名的办法太弱了,先是读取系统时间,然后截取字符串,太笨拙.昨天,查 ...

  5. python 学习 [day6]

    递归阶乘: 函数自己调用自己循环操作的模式称之为递归 def func(num): if num == 1: return 1 return num * func(num - 1) print(fun ...

  6. haoce修改mysql

    修改时长余额 select * from sys_user_product up where up.user_id in(select u.id from sys_user u where login ...

  7. python文件操作_对文件进行复制拷贝_代码实现

    要求: 1,对已经存在的文件进行复制操作 2,复制后的文件在文件名后面加上[复件] 3,文件比较大如何优化处理 #-*- coding: UTF-8 -*- #这是python 2 下面写的,用的ra ...

  8. ubuntu 文件编码错误

    linux 打开出现中文编码错误(invalid encoding): convmv -f gbk -t utf-8 -r --notest /filename

  9. 原生js怎么为动态生成的标签添加各种事件

    这几天用zepto.js写了不少事件,突然想到一个问题,那就是原生的js如何给动态生成的标签添加事件?因为这些标签都是后来通过ajax或者运行其他点击事件生成的,那么如果之前给他们写事件他们这个dom ...

  10. Devstack single node Installation on VM

    Last three days, I want to install devstack on my virtual machine on Vmware Workstation.The VM'syste ...