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. matlab 画框(二) 去白边

    在matlab图像处理中,为了标识出图像的目标区域来,需要利用plot函数或者rectangle函数,这样标识目标后,就保存图像. 一般saves保存的图像存在白边,可以采用imwrite对图像进行保 ...

  2. [转]Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划

    转自:Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划 前面我们从Android应用程序与SurfaceFlinger服务的关系出发,从侧面简单学习了Surfa ...

  3. Repeater控件的分页效果

    <webdiyer:AspNetPager ID="AspNetPager1" runat="server" HorizontalAlign=" ...

  4. greenDao 学习之坑 "java-gen" 目录下的类不能引用

    由于公司最近的项目需要频繁地操作数据库,所以选用greenDao. 网上搜了一 大堆教程,我卡在java工程运行后生成的几个类不能引用了. 看了一下区别,教程的java-gen 目录是蓝色的小框框 , ...

  5. 分享我设计的iOS项目目录结构

    公司新项目就要着手研发了,希望能为这个项目多准备点知识.回想自己做过的项目,目录结构的划分总不如我的心意,有些目录命名不规范导致表达不明确,有些目录因为不具有代表性,导致在实际中不能充分发挥作用,导致 ...

  6. Java面向对象的三大特征

    Java面向对象的三大特征 java面向对象的三大特征:“封装.继承.多态”.更多Java技术知识,请登陆疯狂软件教育官网.微信搜索微信号:疯狂软件,参加2015年优惠活动,有机会获得优惠劵和代金劵. ...

  7. iOS弹框

    IOS 弹框 如果直接弹出一个自定义的视图 可以选用第三方: MJPopup 弹出: if(!bandview) { bandview=[[[NSBundle mainBundle]loadNibNa ...

  8. 扩展jQuery easyui datagrid增加动态改变列编辑的类型

    $.extend($.fn.datagrid.methods, { addEditor : function(jq, param) { if (param instanceof Array) { $. ...

  9. Best Practice: Avoiding or minimizing synchronization in servlets

    Introduction Minimize the use of synchronization in servlets. Because servlets are multi-threaded, s ...

  10. 算法----序列和的 top N

    Description: 两个长度为 n 的数组 A 和 B, 各从中选出一个元素相加 A[i] + B[j], 求 top n 小的那些和. 思路 1:这样的和总共有 n^2 个, 排序,然后取前 ...