Java——关于String(字符串)


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  */

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

上一篇:POJ3750: 小孩报数问题+一道经典约瑟夫问题(猴子选大王)


下一篇:nginx(1)