1.equals()

==:

  a)对于原生数据类型来说,比较的是左右两边的值是否相等。

  b)对于引用类型来说,比较左右两边的引用是否指向同一个对象,或者说左右两边的引用地址是否相同。

equals()方法,该方法定义在Object类当中,因此Java中的每个类都具有该方法,对于Object类的equals()方法来说,它是判断调用equals()方法的引用与传进来的引用是否一

致,即这两个引用是否指向的是同一个对象。对于Object类的 equals()方法来、说,它等价于==。

对于 String 类的 equals()方法来说,它是判断当前字符串与传进来的字符串的内容是否一致。对于 String 对象的相等性判断来说,请使用 equals()方法,而不要使用==。

String 是常量,其对象一旦创建完毕就无法改变。

当使用+拼接字符串时,会生成新的 String 对象,而不是向原有的 String 对象追加内容。

String s = aaa;(采用字面值方式赋值)

  查找 String Pool 中是否存在“aaa”这个对象,如果不存在,则在 String Pool 中创建一个aaa对象,然后将 String Pool中的这个“aaa”对象的地址返回来,赋给引用变量 s,

这样s 会指String Pool 中的这个aaa字符串对象如果存在,则不创建任何对象,直接将 String Pool 中的这个aaa对象地址返回来,赋给 s 引用。

String s = new String(“aaa”);

  a)首先在 String Pool 中查找有没有“aaa”这个字符串对象,如果有,则不在 String Pool中再去创建aaa这个对象了,直接在堆中(heap)中创建一个aaa字符串对象,然后

将堆中的这个“aaa”对象的地址返回来,赋给 s 引用,导致 s 指向了堆中创建的这个aaa字符串对象。

  b)如果没有,则首先在 String Pool 中创建一个“aaa“对象,然后再在堆中(heap)创建一个aaa对象,然后将堆中的这个aaa对象的地址返回来,赋给 s 引用,导致 s 指向了

堆中所创建的这个”aaa“对象。

public class ObjectTest2
{
public static void main(String[] args)
{
Object object = new Object();
Object object2 = new Object(); System.out.println(object == object2); System.out.println("----------------"); String str = new String("aaa");
String str2 = new String("aaa"); System.out.println(str == str2); System.out.println("----------------"); String str3 = "bbb";
String str4 = "bbb"; System.out.println(str3 == str4); System.out.println("----------------"); String str5 = new String("ccc");
String str6 = "ccc"; System.out.println(str5 == str6); System.out.println("----------------"); String s = "hello";
String s1 = "hel";
String s2 = "lo"; System.out.println(s == s1 + s2); System.out.println("----------------"); System.out.println(s == "hel" + "lo"); }
}
结果为:
false
----------------
false
----------------
true
----------------
false
----------------
false
----------------
true

2.StringBuffer

StringBuffer可以创建一个动态的String,而不是一个常量。

 package com.li;

 public class StringBufferTest
{
public static void main(String[] args)
{
StringBuffer buffer = new StringBuffer(); buffer.append("hello").append(" world").append(" welcome").append(100).append(false);
String result = buffer.toString(); System.out.println(result); System.out.println("----------------------------------------"); buffer = buffer.append("hello");
buffer.append(" world");
buffer.append(" welcome");
String result1 = buffer.toString(); System.out.println(result1);
}
}
hello world welcome100false
----------------------------------------
hello world welcome100falsehello world welcome

String类 and StringBuffer类的更多相关文章

  1. String类和StringBuffer类的区别

    首先,String和StringBuffer主要有2个区别: (1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringB ...

  2. String类,StringBuffer类转字符数组

    String不可变类型和StringBuffer可变类型 String类和StringBuffer类都是字符串表示类,区别在于String对象引用变量是不可变的,而StringBuffer类对象引用变 ...

  3. Java 常用类String类、StringBuffer类

    常用类 String类.StringBuffer类 String代表不可变的字符序列 "xxxxxxx"为该类的对象 举例(1) public class Test { publi ...

  4. 【学习笔记】String进阶:StringBuffer类(线程安全)和StringBuilder类

    一.除了使用String类存储字符串之外,还可以使用StringBuffer类存储字符串.而且它是比String类更高效的存储字符串的一种引用数据类型. 优点: 对字符串进行连接操作时,使用Strin ...

  5. 一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对照

    本文主要介绍String类.StringBuffer类.StringBuilder类的差别  : 一.概述 (一)String 字符串常量.可是它具有不可变性,就是一旦创建,对它进行的不论什么改动操作 ...

  6. String类与StringBuffer类

    String类与StringBuffer类   一.String类和StringBuffer类的区别 String类是不可变类,新建的对象为不可变对象(String类的内容和长度是固定的),一旦被创建 ...

  7. (1)StringBuilder类和StringBuffer类 (2)日期相关的类 (3)集合框架 (4)List集合

    1.StringBuilder类和StringBuffer类(查手册会用即可)1.1 基本概念 由于String类描述的字符串内容无法更改,若程序中出现大量类似的字符串时需要申请独立的内存空间单独保存 ...

  8. String类和StringBuffer类的方法

    一.String类的方法 public char charAt(int index)          返回字符串index个字符 public int length()         返回字符串长 ...

  9. 【java】String类和StringBuffer类常用操作

    String类是字符串常量,是不可更改的常量.而StringBuffer是字符串变量,它的对象是可以扩充和修改的.StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于Stri ...

  10. java中String类、StringBuilder类和StringBuffer类详解

    本位转载自http://www.cnblogs.com/dolphin0520/p/3778589.html  版权声明如下: 作者:海子 出处:http://www.cnblogs.com/dolp ...

随机推荐

  1. MVC 导出PDF

    http://www.simple-talk.com/dotnet/asp.net/asp.net-mvc-action-results-and-pdf-content/ http://www.sub ...

  2. fork产生子进程利用pipe管道通信

    http://siqun.blog.163.com/blog/static/213496001201341231121720/ 转载链接:http://hi.baidu.com/hj11yc/item ...

  3. [itint5]支持删除的后继查询

    http://www.itint5.com/oj/#49 这一题一开始想到是用HashSet+链表来做,链表记录prev和next.这样也可以,后来看到都是连续的整数,而且交流了一下觉得可以用类似并查 ...

  4. C++动态链接库测试实例

    前话 上一章节我导出了一个动态链接库 要使用该链接库,我们还需要该链接库对外公开的函数,即头文件 下面开始实例 测试实例 第一步--将动态链接库的dll.lib.和头文件导入项目中 文件目录如下: 项 ...

  5. 99. Recover Binary Search Tree

    题目: Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without chan ...

  6. dom4j 的小小测试

    @Test public void gogo() throws IOException{ InputStream in = this.getClass().getClassLoader() .getR ...

  7. Android 权限查寻表

    示例 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=" ...

  8. 摄像头(4)用Camera和SurfaceView自定义拍照程序

    定制拍照程序的基本步骤 1,打开照相机:Camera.open 这是独占方式打开的 2,创建SurfaceView对象 多缓冲,多线程view 3,添加回调事件监听器(SurfaceHolder.ad ...

  9. Innodb parent table open时导致crash

    case描述: innodb中,父表和子表通过foreign constraint进行关联, 因为在更新数据时需要check 外键constraint,如果父表被大量的子表reference, 那么在 ...

  10. 函数fsp_alloc_seg_inode_page

    分配一个新的inode page /**********************************************************************//** Allocat ...