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. iOS网页开发技术总结

    网页组成 一个有具体功能的完整的网页,一般由3部分组成 HTML:网页的具体内容和结构 CSS:网页的样式(美化网页最重要的一块) JavaScript:网页的交互效果,比如对用户鼠标事件做出响应 H ...

  2. JDBC专题

    JDBC ·持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化以为着将内存中的数据保存到硬盘上加以“固化”,而持久化的实现过程大多 ...

  3. 用Quartz进行作业调度(转)

    概述 各种企业应用几乎都会碰到任务调度的需求,就拿论坛来说:每隔半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行锁定用户解锁任务. 对于一个典型的MIS系统来说,在每 ...

  4. 解决办法-错误:Access denied for user 'root'@'localhost' - java

    如下更改密码即可 mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';mysql> FLUS ...

  5. (spring-第3回【IoC基础篇】)spring的依赖注入-属性、构造函数、工厂方法等的注入(基于XML)

    Spring要把xml配置中bean的属性实例化为具体的bean,"依赖注入"是关卡.所谓的"依赖注入",就是把应用程序对bean的属性依赖都注入到spring ...

  6. JQuery源码分析(四)

    jQuery多库共存处理 多库共存换句话说可以叫无冲突处理. 总的来说会有2种情况会遇到: 1.$太火热,jQuery采用$作为命名空间,不免会与别的库框架或者插件相冲突. 2.jQuery版本更新太 ...

  7. codeforces #Round354-div2-D(BFS)

    题目链接:题目链接 题意:一个n*m的区域,每个格子都有上下左右四个门,相邻的两个格子A可以通向B当且仅当A对B的门和B对A的门都打开,问从起点S到终点T需要的最短时间 #include<bit ...

  8. 爆破vcrkme01(已补上注册机)

    系统 : Windows xp 程序 : vcrkme01 程序下载地址 :http://pan.baidu.com/s/1mh1n33y 要求 : 爆破 使用工具 :OD 可在“PEDIY Crac ...

  9. hdu 3635

    http://acm.hdu.edu.cn/showproblem.php?pid=3635 1-n个城市,对应放着编号1-n的龙珠. 两种操作 T A B 把编号A的龙珠所在城市内的全部龙珠放到有编 ...

  10. Magento速度优化

    一.Magento Compiler可以提高 25% 到 50% 速度 Magento的性能一直是大家比较关心的焦点,现在Magento最新的版本 1.3.2.2 增加了 Magento Compil ...