了解String类

1.String类的概念和不变性

* Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
* 字符串是常量,在创建之后不能更改
* 其实就是说一旦这个字符串确定了,那么就会在内存区域中就生成了这个字符串。字符串本身不能改变,但str变量中记录的地址 值是可以改变的。

* 源码分析,String类底层采用的是字符数组:
private final char value[]
private 修饰说明value只能在String类内部使用,而且又没有提供get方法,所以外部无法获取value数组,就无法改变数组中元素的值
final修饰说明value是常量,一旦创建,就不能被改变,value一旦被初始化成某个数组,将永远指向这个数组,不可能再指向其它的数组了

2.String类创建方式和比较

* a: 创建对象的数量比较
            * String s3 = "abc";
                * 在内存中只有一个对象。这个对象在字符串常量池中
             * String s4 = new String("abc");
                * 在内存中有两个对象。一个new的对象在堆中,一个字符串本身对象,在字符串常量池中
           * b: 案例代码
               public class StringDemo2 {
                  public static void main(String[] args) {
                    //字符串定义方式2个, 直接=  使用String类的构造方法
                    String str1 = new String("abc");
                    String str2 = "abc";
                    System.out.println(str1);
                    System.out.println(str2);
                    System.out.println(str1==str2);//引用数据类型,比较对象的地址 false
                    System.out.println(str1.equals(str2));//true
                }
            }

3.String类常见的构造方法
            * public String():空构造
            * public String(byte[] bytes):把字节数组转成字符串
            * public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串            
            * public String(String original):把字符串常量值转成字符串

String类的其他方法          

方法简介
int length():返回字符串的长度
 String substring(int beginIndex,int endIndex)
           
获取字符串的一部分
String substring(int beginIndex)获取字符串的一部分,从beginIndex到最后一个
        
boolean startsWith(String prefix)判断一个字符串是不是另一个字符串的前缀,开头
boolean endsWith(String prefix)判断一个字符串是不是另一个字符串的后缀,结尾
boolean contains (String s)判断一个字符串中,是否包含另一个字符串
int indexOf(char ch)查找一个字符,在字符串中第一次出现的索引,被查找的字符不存在,返回-1
byte[] getBytes():将字符串转成字节数组,此功能和String构造方法相反,byte数组相关的功能,查询编码表
char[] toCharArray()将字符串转成字符数组,功能和构造方法相反
boolean equals(Object obj)方法传递字符串,判断字符串中的字符是否完全相同,如果完全相同返回true
boolean equalsIgnoreCase(String s) 传递字符串,判断字符串中的字符是否相同,忽略大小写 
char[] toCharArray()将字符串转成字符数组
int length()返回字符串的长度 ,包含多少个字符
int lastIndexOf(String str)返回在此字符串中最右边出现的指定子字符串的索引。

String类经典面试题

1.String类是基本类型吗?

答案:不是。java有四类八型,它们是浮点型(float,double),整型(int,long,short,byte),Boolean类型,字符型(char)


 2.String是否可以被继承?

答案:不可以,因为String类似final类.前面源码已经说明了,String类底层采用的是字符数组,private final char value[]

 

3.String和StringBuilder、StringBuffer的区别?
答:Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,其中String是只读字符串,String引用的字符串内容是不能被改变的。而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。


 4.、String s = new String(“xyz”);创建了几个字符串对象?
答:两个对象,一个是静态区的”xyz”,一个是用new创建在堆上的对象。               

5.判断下面是输出值

                    String str1 = new String("abc");
                    String str2 = "abc";
                    System.out.println(str1);
                    System.out.println(str2);
                    

答案:System.out.println(str1==str2);//引用数据类型,比较对象的地址 false
          System.out.println(str1.equals(str2));//true

扩展一下:如何分辨“==”和equals()呢,“==”在比较数值的时候比如int类型时,比较的是它们的值,在比较引用类型的时候如String时,比较的是它们的地址;equals在比较String类型时,比较的是它们的值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值