1、面试题:两种创建方式的区别
String s="abc" 字符串存在字符串常量池中,这句话是在字符串常量池中创建了一个abc字符串,并把地址赋给了s(引用型变量),如果常量池中没有,就创建,如果有,就直接拿来用,这种方式是创建了一个对象
所以,String s1="abc";
System.out.println(s==s1);//打印结果是true,直接从常量池拿来用了
但是如果String s1= new String("abc");这句话是在堆内存中创建了一个String对象,这个对象在构建的时候接收了一个字符串(abc)对象,这种方式,其实在内存中是创建了两个对象,但并没有在字符串常量池中做任何事情,这时候的字符串是没有在字符串常量池中的 ,如果再打印
System.out.pringln(s==s1);结果是false,双==比较的是地址值
所以,这两种方式,在比较地址的时候是不一样的
System.out.println(s.equals(s1));这个比较的是对象值,结果是true,因为String类是object类的子类,比较的是内容,而不是地址
2、java.lang是java的核心包,1.2版本的jdk后,自动导入这个包,用的时候不需要自己导包
3、String s=new String();等效于String s=" ";不等于Stirng s=null;
4、字符是字符串中的单元,String的构造函数能把数组变成字符串,也能把数组的一部分变成字符串
5、数组的length是属性,字符串的length()是方法,注意一下
6、根据位置获取字符 char charAt(int index)返回值是char类型
7、根据字符获取在字符串中第一次出现的位置int indexof(int ch),
注意是第一次,参数类型是int的,是因为能接收97,打印出来a这种
lastIndexOf('a')是从后往前找。String s="abcdae",从后往前数,但返回的值是4,注意不是1
可以根据-1来判断该字符或者字符串是否存在。
索引方法有两个作用,很重要。
6、空格是字符,是有自己的ASCII码值的
String s="abc" 字符串存在字符串常量池中,这句话是在字符串常量池中创建了一个abc字符串,并把地址赋给了s(引用型变量),如果常量池中没有,就创建,如果有,就直接拿来用,这种方式是创建了一个对象
所以,String s1="abc";
System.out.println(s==s1);//打印结果是true,直接从常量池拿来用了
但是如果String s1= new String("abc");这句话是在堆内存中创建了一个String对象,这个对象在构建的时候接收了一个字符串(abc)对象,这种方式,其实在内存中是创建了两个对象,但并没有在字符串常量池中做任何事情,这时候的字符串是没有在字符串常量池中的 ,如果再打印
System.out.pringln(s==s1);结果是false,双==比较的是地址值
所以,这两种方式,在比较地址的时候是不一样的
System.out.println(s.equals(s1));这个比较的是对象值,结果是true,因为String类是object类的子类,比较的是内容,而不是地址
2、java.lang是java的核心包,1.2版本的jdk后,自动导入这个包,用的时候不需要自己导包
3、String s=new String();等效于String s=" ";不等于Stirng s=null;
4、字符是字符串中的单元,String的构造函数能把数组变成字符串,也能把数组的一部分变成字符串
5、数组的length是属性,字符串的length()是方法,注意一下
6、根据位置获取字符 char charAt(int index)返回值是char类型
7、根据字符获取在字符串中第一次出现的位置int indexof(int ch),
注意是第一次,参数类型是int的,是因为能接收97,打印出来a这种
lastIndexOf('a')是从后往前找。String s="abcdae",从后往前数,但返回的值是4,注意不是1
可以根据-1来判断该字符或者字符串是否存在。
索引方法有两个作用,很重要。
6、空格是字符,是有自己的ASCII码值的