String类:
1.字符串的特点:
java中用String类来描述字符串。
字符串是一个特殊的对象,一旦初始化就不可以被改变,因为是常量。
常见面试题1
String s="abc";
String s1=new Strng("abc");是否相同?
前者"abc"是一个对象。后者是两个对象,new string()代表一个对象,"abc"也代表一个对象。
Sop(s1==s2);==比较的是数据。false
Sop(s1.equals(s2));比较的是内存的地址值,equals覆写了Object类中的equals方法。
True
常见面试题2
String a="abcd";//在缓冲池创建了一个abcd的字符串。
String a1="ab";//a1和a2都是变量,无法确定。
String a2="cd";
String b=a1+a2;//b是要重新进行分配的。
String c="ab"+"cd";//两个都是常量值,用连接符连接在一起还是字符创。abcd
System.out.println("a==b:"+(a==b));//false
System.out.println("a==c:"+(a==c));//true
2.常见操作方法:
A获取的方法:
a获取长度:Int length();
注意:数组长度是个属性,字符串是个方法
b获取字符串中的字符:charAt(int index);返回值是一个字符。
c一个字符或者一个字符串在一个字符串中的位置
Int indexof(int ch)
Int indexof(int ch,int fromIndex)
Int indexof(ch,fromIndex)
Int indexof(srting,fromindex)
Int lastIndexof(ch);
注意:这些获取索引位的方法,如果没有查找的内容,返回-1,所以这个方法。
d获取部分字符串:String substring(begin,end)
B判断的方法:
a是否包含指定的字符串 Boolean contains(String)
b是否是以指定的字符串开头 Boolean startsWith(String)
c是否是以指定的字符串结尾 Boolean endwith(String)
d忽略大小写判断字符串 Boolean equalsIgnoreCase(string)
C 转换功能:
a将字符串转成小写 String toLowerCase();
b将字符串转成大写 String toUpperCase();
c将字符串转成数组
Byte[] getBytes();
Char[] getChar();
d将字符串转成字符串数组 String[]
e将字符串中的内容进行替换
String replace(oldch1,new ch2)
String replace(string1,string2)
f去除字符串两端的空白 Trim();
3.如何查阅API文档的小技巧,先查找返回值
4.常量池:
String是一个特殊的包装类数据。可以用下面两种方式创建:
String str = new String("abc");
String str = "abc";
第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。
而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈(常量池)中有没有存放"abc",如果没有,则将"abc"存放进栈(常量池),并令str指向”abc”,如
果已经有”abc” 则直接令str指向“abc”。
比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==,下面用例子说明上面的理论。
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //true
可以看出str1和str2是指向同一个对象的。
在eclipse中的调试视图中可以看到abc的id是同一个。实际上java对常量池中进行了优化。同样的内容只保留一份。用这种方式创建多个”abc”字符串,在内存中其实只存在一个对象而已. 这种写法有利与节省内存空间. 同时它可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。
String str1 =new String ("abc");
String str2 =new String ("abc");
System.out.println(str1==str2); // false
在调试中可以看到有两个abc,它们的id不同。
也就是说,用new的方式是生成不同的对象。每一次生成一个。
对于String str = new String("abc");一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。
另一方面, 要注意: 我们在使用诸如String str = "abc";的格式定义类时,总是想当然地认为,创建了String类的对象str。担心陷阱!
此时对象可能并没有被创建!而可能只是指向一个先前已经创建的,放在常量池里的对象(广义的对象,不仅指new出的)。只有通过new()方法才能保证每次都创建一个新的对象。由于String类的immutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer类,以提高程序效率。
5. 基本类型数据包装类 Integer类
|-- 静态方法 parseInt(String)将数字格式的字符串转成整型数据
|-- 静态方法 parseInt(String,int)将数字格式的字符串转成整型数据,基数就是进制,标明要转的数据的进制,转换的结果都是十进制
|-- toBinaryString().......
|-- 自动装箱和拆箱 Integer i = 30; i = i + 5;
1.字符串的特点:
java中用String类来描述字符串。
字符串是一个特殊的对象,一旦初始化就不可以被改变,因为是常量。
常见面试题1
String s="abc";
String s1=new Strng("abc");是否相同?
前者"abc"是一个对象。后者是两个对象,new string()代表一个对象,"abc"也代表一个对象。
Sop(s1==s2);==比较的是数据。false
Sop(s1.equals(s2));比较的是内存的地址值,equals覆写了Object类中的equals方法。
True
常见面试题2
String a="abcd";//在缓冲池创建了一个abcd的字符串。
String a1="ab";//a1和a2都是变量,无法确定。
String a2="cd";
String b=a1+a2;//b是要重新进行分配的。
String c="ab"+"cd";//两个都是常量值,用连接符连接在一起还是字符创。abcd
System.out.println("a==b:"+(a==b));//false
System.out.println("a==c:"+(a==c));//true
2.常见操作方法:
A获取的方法:
a获取长度:Int length();
注意:数组长度是个属性,字符串是个方法
b获取字符串中的字符:charAt(int index);返回值是一个字符。
c一个字符或者一个字符串在一个字符串中的位置
Int indexof(int ch)
Int indexof(int ch,int fromIndex)
Int indexof(ch,fromIndex)
Int indexof(srting,fromindex)
Int lastIndexof(ch);
注意:这些获取索引位的方法,如果没有查找的内容,返回-1,所以这个方法。
d获取部分字符串:String substring(begin,end)
B判断的方法:
a是否包含指定的字符串 Boolean contains(String)
b是否是以指定的字符串开头 Boolean startsWith(String)
c是否是以指定的字符串结尾 Boolean endwith(String)
d忽略大小写判断字符串 Boolean equalsIgnoreCase(string)
C 转换功能:
a将字符串转成小写 String toLowerCase();
b将字符串转成大写 String toUpperCase();
c将字符串转成数组
Byte[] getBytes();
Char[] getChar();
d将字符串转成字符串数组 String[]
e将字符串中的内容进行替换
String replace(oldch1,new ch2)
String replace(string1,string2)
f去除字符串两端的空白 Trim();
3.如何查阅API文档的小技巧,先查找返回值
4.常量池:
String是一个特殊的包装类数据。可以用下面两种方式创建:
String str = new String("abc");
String str = "abc";
第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。
而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈(常量池)中有没有存放"abc",如果没有,则将"abc"存放进栈(常量池),并令str指向”abc”,如
果已经有”abc” 则直接令str指向“abc”。
比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==,下面用例子说明上面的理论。
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //true
可以看出str1和str2是指向同一个对象的。
在eclipse中的调试视图中可以看到abc的id是同一个。实际上java对常量池中进行了优化。同样的内容只保留一份。用这种方式创建多个”abc”字符串,在内存中其实只存在一个对象而已. 这种写法有利与节省内存空间. 同时它可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。
String str1 =new String ("abc");
String str2 =new String ("abc");
System.out.println(str1==str2); // false
在调试中可以看到有两个abc,它们的id不同。
也就是说,用new的方式是生成不同的对象。每一次生成一个。
对于String str = new String("abc");一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。
另一方面, 要注意: 我们在使用诸如String str = "abc";的格式定义类时,总是想当然地认为,创建了String类的对象str。担心陷阱!
此时对象可能并没有被创建!而可能只是指向一个先前已经创建的,放在常量池里的对象(广义的对象,不仅指new出的)。只有通过new()方法才能保证每次都创建一个新的对象。由于String类的immutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer类,以提高程序效率。
5. 基本类型数据包装类 Integer类
|-- 静态方法 parseInt(String)将数字格式的字符串转成整型数据
|-- 静态方法 parseInt(String,int)将数字格式的字符串转成整型数据,基数就是进制,标明要转的数据的进制,转换的结果都是十进制
|-- toBinaryString().......
|-- 自动装箱和拆箱 Integer i = 30; i = i + 5;