栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础整理(十二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础整理(十二)

String类 1. 基本概念及内存
  • String表示字符串类型,属于引用数据类型,不属于基本数据类型

  • Java中随便使用双引号括起来的都是String对象

  • Java中规定双引号括起来的字符串是不可变的,也就是说“abc"自始至终都不变,都不可能变成”abcd“

  • 在JDK中双引号括起来的字符串直接存储在”方法区“中的”字符串常量池“中

    字符串存储在”字符串常量池“中的原因是:字符串在实际开发中使用频繁。为了提高效率,所以把字符串放到了方法区的字符串常量池中(JDK7以后字符串常量池好像移动到了堆当中)

  • 内存

    String s="abc"; //s保存的不是"abc"字符串,而是对象的内存地址
    

String s = new String("abc");

  • ” == “ 和 ”equlas"

    String s1="hello";
    String s2="hello";
    System.out.println(s1==s2); // true 比较的是变量中保存的内存地址
    

String s1=new String("hello");
String s2=new String("hello");
System.out.println(s1.equals(s2)); //false 地址不相同

  • 易错

    • String s1="abcdef";
      String s2="abcdef"+"xy";
      

      实际创建了三个对象 ”abcdef“、”xy"、”abcdefxy“,都存储在字符串常量池中

    • String k=new String("hello");
      System.out.println("hello".equals(k)); //推荐使用这种,避免空指针异常
      System.out.println(k.equals("hello")); //万一k为空指针 会报错
      
    • String s1 =new String("hello");
      String s2 =new String("hello");
      

      上述代码中创建了几个对象?

      三个,字符串常量池中有一个"hello",堆内存中有两个String对象


2. 构造方法
  • String s = new String("");

  • String s = “”;

  • String(字节数组)

    byte[] bytes = {97,98,99};
    String s2 = new String(bytes);
    System.out.println(s2); //abc
    
  • String(字节数组,数组元素的起始下标,长度)

    String s3 = new String(bytes,1,2) //bc
    
  • String(char数组)

    char[] chars = {'a','b','c'};
    String s4 = new String(chars); //abc
    
  • String(char数组,起始下标,长度)

    String s5 = new String(chars,1,2);//bc
    

3. charAt方法
//char charAt(int index)
char c ="中国人".charAt(1);//国  

"中国人"是一个字符串String对象,只要是对象就可以“.”


4. compareTo方法

对两个字符串进行比较,并且同时看出两个字符串的大小

//int compareTo(String anotherString)
int result1 = "abc".compareTo("abc"); //0
int result2 = "abcd".compareTo("abce");   //小于0  前小后大
int result3 = "abce".compareTo("abcd");   //大于0  前大后小

5. contains方法

判断前面的字符串是否包含后面的字符串

// boolean contains(CharSequence s)
"HelloWorld.java".contains(".java"); //true
"http://www.".contains("https://"); //false

6. endWith方法

判断当前字符串是否以某个字符串结尾

"text.txt".endWith(".java"); // false
"text.txt".endWith("xt"); //true

7. equalsfa方法
"abc".equals("abc"); //true

8. equalsIgnoreCase方法

判断两个字符串是否相等,并且同时忽略大小写

//boolean equalsIngoreCase(String anotherString)
"Abc".equalsIgnoreCase("abC"); //true
9. getBytes方法
//byte[] getBytes()
byte[] bytes = "abc".getBytes(); //97 98 99

10. indexOf方法

判断某个字符串在当前字符串中第一次出现处的索引

//int indexOf(String str)
"oraclejavac++".indexOf("java")  //6

11. isEmpty方法

判断某个字符串是否为“空字符串” 注意 不是null 是空字符串,因为底层源代码调用的是字符串的length()方法

//boolean isEmpty()
String s="a";
s.isEmpty() //false

12. length方法

判断数组长度是length属性,判断字符串长度是length()方法

//int length()
"abc".length(); //3

13. lastIndexOf方法

判断某个子字符串在当前字符串中最后一次出现的索引

// int lastIndexOf(String str)
"oraclejavagolangjavac++".lastIndexOf("java"); //16

14. replace方法
//String place(CharSequence target, CharSequence replacement) String的父接口是CharSequence
"http://www.baidu.com".replace("http://","https://") //https://www.baidu.com

15. startsWith方法

判断某个字符串是否以某个子字符串开始

//boolean startsWith(String prefix)
"http://www.baidu.com".startsWith("http") //true

16. substring方法
//String substring(int beginIndex)
"http://www.baidu.com".substring(7); //www.baidu.com

包括beginIndex,不包括endIndex

//String substring(int beginIndex, int endIndex)
"http://www.baidu.com".substring(7,10) //www

17. toCharArray方法

将字符串转换成char数组

//char[] toCharArray()
char[] chars = "我是中国人".toCharArray();

18. toLowerCase和toUpperCase

转换为小写

//String toLowerCase()
"ABCd".toLowerCase(); //abcd

转换为大写

//String toUpperCase()
"abcd".toUpperCase(); //ABCD

19. trim方法

去除字符串前后的空白

//String trim()
" hello   world  ".trim(); //hello   world
20. valueOf方法

将“非字符串”转换成“字符串”,底层调用toString()方法

String s1 = String.value(100);
String s2 = String.value(true);
String s3 = String.value(6.12);
String s4 = String.value(new Customer); //如果Customer类没有重写toString()方法就输出对象的内存地址 重写了就输出                                              toString()方法内的重写内容
  • 研究一下println()方法

    为什么输出一个引用时,会调用toString()方法?

    本质上System.out.println()这个方法输出任何数据类型时都先转换为字符串,再输出,它的底层代码会先去调用valueOf()方法,将对象转化为String对象,而valueOf()方法的底层又去调用了toString()方法

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/434399.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号