String s = "abc";//创建一个字符串对象在常量池中。

String s2 = new String("abc");//创建两个对象   一个new  一个字符串对象在堆内存中。

boolean b = (s==s2);//b为false   比较的是地址

boolean b2 = s.equals(s2);//b2为true   重写了Object的equals方法,  比较的是俩个字符串的内容。

String e = new String();//等价于String e = "";


相等性的比较(==)
1》对于原生类型数据来说,比较的是左右两边的值是否相等。
2》对于引用类型来说,比较的是左右两边的引用是否指向同一个对象或者说左右两边的引用地址是否相等。

当打印引用时,实际上回打印出引用所有指向对象的toString()方法的返回值,因为每个类都有直接或者间接的继承自Object而Object类中定义了toString()因此每个类都有toString()这个方法。

equals()方法该方法定义在 Object类中,因此java中每个类都具有该方法,对于Object类的equals()方法来说,他是判断调用equals()方法的引用与传进来的引用是否一致,即这两个引用是否指向的的是同一个对象。对于Object类的equals()方法来说他等价于==

对于String类的equals()方法来说,他是判断当前字符串与传进来的字符串的内容是否一致。

对于String对象的相等性来说,请使用equals()方法来说 判断而不要使用==。

String是常量,其对象一旦创建完毕就无法改变,当使用+拼接字符串时,就会生成新的String对象,而不是向原有的String对象追加内容。

Stringpool(字符串池)
String S= ”aaa“(采用的是  字面值方式赋值)
                1)查找SringPool中是否存在”aaa“这个对象,如果不存在则StringPool中创建一个”aaa“对象,然后将SringPool中的这个”aaa“对象的地址返回回来,赋给引用变量S,这样 S会指向StringPool中的这个”aaa“字符串对象。
                2)如果存在,则不创建任何对象,直接将StringPool中的这个”aaa“ 对象地址返回回来,赋给S引用。

String S=new String("aaa");
                1)首先在StringPool中查找有没有”aaa“这个字符串对象,如果有,则不再StringPool中创建一个”aaa“字符串对象,然后将堆中的这个”aaa“对象的地址返回回来赋给S引用。到时S指向了堆中这个”aaa“字符串对象。
                2)如果没有,首先在stringPool中创建歘一个”aaa“ 对象,然后将队中的这个”aaa“ 对象的地址返回回来,赋给S引用倒置S指向堆中所创建的这个”aaa“ 对象。

String本身是一个类,在String类中定义的构造方法:public String (String original)  可以接收一个String类的对象,并重新实例化String对
                             象,String还可以采用直接赋值的方式进行对象的实例化

一个字符串是使用 “”括起来的 那么一个字符串的常量实际上本身就属于String的一个匿名对象

String  str = "hello" ; 与 String str = new String("hello"); 有什么区别?、

String  str="hello "   如果内存已经为"hello"分配了内存空间,那么Str只要指向"hello"内存对象地址;

String str = new String("hello");  内存中重新分配一块内存区域给"hello",str指向"hello",也就是内存中有两个hello的对象了,而且指向的地址不一样

//获取俩个字符串中  的 最大相同字串

获取 一个字符串的所有字串:   按照其长度去找  从最大长度  找到最小长度

private static String getMaxSubstring(String s1, String s2)

{

// TODO Auto-generated method stub

for (int i = 0; i < s2.length(); i++)

{

for(int a=0,b=s2.length()-i; b!=s2.length()+1; a++,b++)

{

String sub = s2.substring(a, b);

if(s1.contains(sub))

{

System.out.println(sub);

return sub;

}

}

}

return null;

}

========================================================================================

/*

* StringBuffer:其实就是字符串缓冲区。  用于存储数据的容器。

* 特点:


1.长度是可变的。


2.可以存不同类型的数据。


3.最终要转成字符串进行使用

* 是一个容器对象,具备的功能:


添加:


append(data)返回类型是String


insert(index, data)


删除:


delete(start, end):包含头,不包含尾


deleteCharAt(int index):删除指定位置上的元素


查找


char charAt(index);


int indexOf(string);


int lastIndexOf(string);


修改:


StringBuffer replace(start, end,string);


void setCharAt(index, char);

*

* StringBuffer是线程同步的,通常用于多线程。

* StringBuilder是线程不同步的。通常用于单线程的,他的出现提高了效率

*

l  */

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java——关于String(字符串)的更多相关文章

  1. java 判断String字符串是不是json数据

      java 判断String字符串是不是json数据 CreationTime--2018年8月24日18点23分 Author:Marydon JSONObject jo = null; try ...

  2. < java.lang >-- String字符串

    java中用String类进行描述.对字符串进行了对象的封装.这样的好处是可以对字符串这种常见数据进行方便的操作.对象封装后,可以定义N多属性和行为. 如何定义字符串对象呢?String s = &q ...

  3. 浅谈java的String字符串

    一提到java的String首先想到的应该就是它的不可变性,其原因是因为String类的内部是使用一个private final char value[]的字符数组来存储数据,本身没有相应的set方法 ...

  4. java中String字符串

    一.定义String字符串 String字符串和char字符不同,char使用单引号,只能表示一个字符,字符串就是一段文本.String是个类.这个类使用final修饰,所以这个类是不可以继承扩充和修 ...

  5. JAVA中String(字符串)课堂总结

    一:Java编译器中关于字符串自动优化 例子一: 源代码: public class StringPool { public static void main(String args[]) { Str ...

  6. Java中String字符串常量池总结

    最近到广州某建站互联网公司面试,当时面试官问假设有两个字符串String a="abc",String b = "abc";问输出a==b是true还是fals ...

  7. java中String字符串的==解析

    今天不知道怎么看了下string的==的问题,本身我觉得我这个水平去判断几个字符串相等还能出问题?呵呵,真的出了大问题,根本原因在于对java字节码的不了解. 首先,==运算符比较的是两个变量所指向的 ...

  8. Java中String字符串常量池

    首先看一个例子,通过这个例子更能快速理解String常量池 public static void main(String[] args) { String a = "ab"; St ...

  9. JAVA中String字符串比较equals()和equalsIgnoreCase()的区别

    标签: equals和equalsIgnoreC 2012-11-11 16:03 65644人阅读 评论(0) 收藏 举报  分类: JAVA(3)  1.使用equals( )方法比较两个字符串是 ...

  10. java中String字符串的替换函数:replace与replaceAll的区别

    例如有如下x的字符串 String x = "[kllkklk\\kk\\kllkk]";要将里面的“kk”替换为++,可以使用两种方法得到相同的结果 replace(CharSe ...

随机推荐

  1. 一张图告诉你为什么 Gmail 是最好的邮箱,以及大量私货

    今天早上,我的同事详细介绍了 Gmail 相比其他邮箱的优势,比如强大的垃圾邮件过滤.简单的使用界面.强大的功能设置等等.但是对我来说,这些并不是我使用 Gmail 的最重要原因. 我第一个正式的邮箱 ...

  2. mongo db 分享 ppt

    在公司内部的mongo db的ppt.初步进阶 http://files.cnblogs.com/files/yuhan-TB/mongoDB.pptx

  3. 用javascript正则表达式来格式化金额

    <html><head><script> function a() { var amount = "-22334.334455"; //if(/ ...

  4. python随笔

    1. 使用iter实现接收用户多行输入 stopword = '' str = '' print('请将要添加的内容输入下方,输入空白行按回车退出程序:') for line in iter(inpu ...

  5. 谈谈你对http的理解

    一.先看一张图: 二.要client与sever能沟通 1.需要一样的规则,遵循一定的规范-----------协议 好比:不同国家的人,需要一门通用的语言. 2.谈到协议------http---- ...

  6. HexDump.java解析

    从包名我们可以看出该类并没有对应用开发者开放,也就是说在google开放的Android API文档中并没有该类的相关介绍:好在Android系统源码是开源的,因此我在解决framework中问题的时 ...

  7. 初次使用百度地图API

    因为项目需要,不得不使用百度地图的API,以前从未了解过API,这不是唬人,真的,所以对百度地图API充满了恐惧,但是到后面,已经麻木了.期间遇到过很多错误,每一个都弄得头大,借博客的名义把平时遇到的 ...

  8. vim的Tab设置为4个空格

    vim /etc/vimrc 1    set ts=42    set expandtab3    set autoindent 按tab键时产生的是4个空格,这种方式具有最好的兼容性.

  9. 30道四则运算<2>

    #include<iostream> #include<time.h> #include<fstream> #define random() (rand()%100 ...

  10. 八、CCMenu和CCMenuItem

    游戏中经常会提供一些菜单项让用户开始游戏.暂停\继续游戏.打开\关闭音乐或者是返回到上一个界面,比如下面两张图中用红色线框标记的菜单项     我们可以使用CCMenu和CCMenuItem实现上述的 ...