Java——详解String类

简介: Java——详解String类

1.实例化String类对象


有两种方式:

package m10d26;
public class String_1 {
  public static void main(String[] args) {
  //实例化方式一
  String name1="张三";
  System.out.println(name1);
  //实例化方式二
  String name2=new String("李四");
  System.out.println(name2);
  }
}


输出结果:

张三
李四


2."=="与"equals方法"的区别


“==” 比较的是引用(是否指向同一个内存块) ,而“equals”比较的是具体内容

package m10d26;
public class String_1 {
  public static void main(String[] args) {
  String name1="张三";
  String name2=new String("张三");
  String name3=name2;//传递引用,类似于指针
  System.out.println("name1==name2:"+(name1==name2));
  System.out.println("name1==name3:"+(name1==name3));
  System.out.println("name2==name3:"+(name2==name3));
  System.out.println("===============================");
  System.out.println("name1.equals(name2):"+(name1.equals(name2)));
  System.out.println("name1.equals(name3):"+(name1.equals(name3)));
  System.out.println("name2.equals(name3):"+(name2.equals(name3)));
  }
}


输出结果:

name1==name2:false
name1==name3:false
name2==name3:true
===============================
name1.equals(name2):true
name1.equals(name3):true
name2.equals(name3):true


看看内存分布情况:


20190909235111199.png



name1和name2分别赋值为"张三",同时指向堆里面的两个相同的内存块;此时,将name2的地址传递给name3,也就是将堆里面的地址传递给name3,所以name2和name3指向同一个内存块;


" == "比较的是应用(是否指向同一个内存块);因此name2 == name3是true,其余都是假的;


".equals方法"比较的是具体内容(所指向的内存块里面的内容是否相等);因此三个内存块的内容是一样的,因此都为true;


"==“和”.equals方法"两个比较的函数的返回值都是Boolean类型的。


3.String两种实例化方式的区别


直接赋值方式:创建的对象存放到字符串对象池里,假如存在的,就不会再创建;

new对象方式:每次都创建一个新的对象;

package m10d27;
public class String_2 {
  public static void main(String[] args) {
  String name1="张三";
  String name2="张三";
  String name3=new String("张三");
  String name4=new String("张三");
  System.out.println("name1==name2:"+(name1==name2));
  System.out.println("name1==name3:"+(name1==name3));
  System.out.println("name3==name4:"+(name3==name4));
  }
}


输出结果:

name1==name2:true
name1==name3:false
name3==name4:false


看看内存分布情况:


20190909235326973.png


name1和name2都指向同一个内存块;而name3和name4都是new出来的新内存块;


因此用"=="进行比较的时候name1和name2是相等的


4.字符串内容不可变


字符串的特性:不能改变字符串的内容;


要想改变,只能通过指向一个新的内存地址;

package m10d27;
public class String_3 {
  public static void main(String[] args) {
  String name="张";
  name+="三";
  System.out.println(name);
  }
}


输出结果:

张三


看看内存分布:


20190909235508199.png



这里修改了name,本质的话name指向了一个新的内存区域,而原来的“张”这个内存块会被垃圾回收掉;


String类的常用方法:


1.char chartAt(int index) 返回指定索引处的char值


这里的index 是从0开始的;


我们先上下实例:

package com.java.chap03.sec08;
public class Demo5 {
    public static void main(String[] args) {
        String name="张三";
        char ming=name.charAt(1);
        System.out.println(ming);
        String str="我是中国人";
        for(int i=0;i<str.length();i++){
            System.out.println(str.charAt(i));
        }
    }
}


运行输出:







int length() 返回字符串的长度
int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引
package com.java.chap03.sec08;
public class Demo06 {
    public static void main(String[] args) {
        // indexOf方法使用实例
        String str="abcdefghijdklmoqprstuds";
        System.out.println("d在字符串str中第一次出现的索引位置:"+str.indexOf('d'));
        System.out.println("d在字符串str中第一次出现的索引位置,从索引4位置开始:"+str.indexOf('d',4));
    }
}


String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串
package com.java.chap03.sec08;
public class Demo07 { 
    public static void main(String[] args) {
        // substring方式读取
        String str="不开心每一天";
        String str2="不开心每一天,不可能";
        String newStr=str.substring(1);
        System.out.println(newStr);
        String newStr2=str2.substring(1, 6);
        System.out.println(newStr2);
    }
}


public String toUpperCase() String 中的所有字符都转换为大写
package com.java.chap03.sec08;
public class Demo08 {
    public static void main(String[] args) {
        String str="I'm a boy!";
        String upStr=str.toUpperCase(); // 转成大写
        System.out.println(upStr);
        String lowerStr=upStr.toLowerCase(); // 转成小写
        System.out.println(lowerStr);
    }
}



目录
相关文章
|
1月前
|
Java 测试技术 开发者
Java零基础-indexOf(String str)详解!
【10月更文挑战第14天】Java零基础教学篇,手把手实践教学!
111 65
|
5天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
|
22天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
43 17
|
14天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
18天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
67 4
|
19天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
41 2
|
23天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
27天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
27天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
27天前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
31 3

热门文章

最新文章

下一篇
无影云桌面