String 常用的方法

来源:互联网 发布:发射后不管知乎 编辑:程序博客网 时间:2024/05/22 08:12

注意的是:String stu="abc";   String stu1=new String("abc");   stu和stu1的哈希值是一样的,所以存入HashSet集合时只能存一个(因为不允许重复)

 HashSet(存入的条件) (e.hash == hash && ((k = e.key) == key || key.equals(k)))==>如果是true 就认为它们是一样


String  常用的方法
1:求长度
字符串.length();//返回字符串长度


2:字符串比较 
字符串1.equals(字符串2)//比较是否两个字符串每个字符的都一样才返回true,因为重写了Object的toString方法


  == 比较是地址(判断是否是同一个字符串对象)   equals比较的是两个字符串的值。
  字符串1.equalsIgnoreCase  不区分大小写的比较
  
String aa="wwwWWW";
String aa1="wwwwwQQWWW";
String aa2=aa.toLowerCase();//转为小写
String aa3=aa1.toUpperCase();//转为大写

3:字符串的连接
两张方式:
String s=y.concat(y1)//返回String必须接受后输出才是连接后的字符串//StringBuffer 不用
//StringBuffer 不用 对象.append()重写toStrong
String name="小花"
String a=name+",你好";

4:字符串提取和查询


String y="raggsda";
y.indexOf(int ch)
y.indexOf(String ch)//搜索第一个出现存在返回下标,不存在返回-1
y.lastindexOf(int ch)
y.lastindexOf(String ch)//搜索最后一个出现存在返回下标,不存在返回-1
y.substring(int index)//返回下标以后的字符段
y.substring(int index,int index1)//返回下标之间的字符index -->index1-1,的字符
y.trim()//返回一个前后不含有空格的字符串副

5:字符串.split(separator,limit)
以separator拆分可单可多   limit控制分多少次





String  面试题
String str=new String("asd");
//如果堆的常量池不存在asd,那么就会在常量池产生一个对象,再去堆产生一个对象
产生了两个对象,反之1个


   01.基本数据类型 比较的是 值
   02.引用数据类型比较的是 内存地址
  
  
  1.为什么String 类中的equals是比较的 字符串内容
    01.查询Object类中的方法
      public boolean equals(Object obj) {
         return (this == obj);  比较的是内存地址
        }
    02.再去看String类中的方法
       String中的equals是重写了Object类中的equals方法
              比较的是内容
      
      
      String a = "abc";
      String b = "abc";
      String c = new String("abc");


System.out.println(a.equals(b)); // 值肯定一致 所有返回 true
System.out.println(a == b);// 内存地址也一致 所以 true
System.out.println("****************************************");
System.out.println(a.equals(c));// 值肯定一致 所有返回 true
System.out.println(a == c);// 内存地址不一致 所以 false


String a = "a";
String b = "bc";
String c = "abc";
System.out.println(c == ("a" + "bc"));  //true

01.在程序编译期间 会把常量(不变)a 和常量bc 合并成 abc
02.之后再和“abc“进行比较
 
 
String a = "a";
String b = "bc";
String c = "abc";
System.out.println(c == (a + b)); // false

01. a 和 b 都是变量(变化), 在编译期间无法确定变量的值
02. c在编译期间已经确定, ab无法确定

final String a = "a";
final String b = "bc";
String c = "abc";
System.out.println(c == (a + b)); // true


final可以修饰:
   01.修饰的属性,就是常量  运行期间不能改变
   02.修改的方法,不能被子类重写
   03.修改的类,不允许被继承



-1 +2 =?
  1 0 0 0 0 0 0  1    01:找到-1的源码
  1 1 1 1 1 1 1  0    02:找到-1的反码 // 转反时符号位不变其余的去反,0变1,1变0
  1 1 1 1 1 1 1  1    03:找到-1的补码
  0 0 0 0 0 0 1  0   04:找到 2的 补码
============================
  0 0 0 0 0 0 0  1


二进制补码去运算的;
最左为代表正负:0为:正,1为:负
负数的源码===>补码公式   源转反+1    


负数的补码===>源码公式   补码先变反码+1




















原创粉丝点击