java8-API-String比较

java8-API-String比较,第1张

java8-API-String比较 API API = (Application Programming Interface),应用程序编程接口

理解:
通俗说:设计一个机器人踢足球,需要进行向前、向后、射门等命令,设计者需要提供一些控制机器人行为的接口类,类中定义了机器人行为的方法

Java API = JDK中提供的各种功能的Java类。

理解:
需要学习如何使用,不需要关心如何实现。
通过帮助文档学习。
使用帮助文档的方式:
①右键打开该文档;
②找到索引选项卡中的输入框;
③输入所要查询的类,例如Random/Scanner
④看类在哪个包下(注意:java.long下的类是不需要导包的)
⑤看类的描述
⑥看类的构造方法
⑦看成员方法,着重看返回值、方法名、参数、描述信息

API练习

案例:使用Scanner获取键盘录入的字符串数据

public class ScannerDemo {
    public static void main(String[] args){
        //创建对象
        Scanner sc = new Scanner(System.in);
        //解释:类名 对象名 = new 类名(参数)
        // Scanner(System.in)是有参数的构造方法

        //接收对象
        System.out.println("请输入一个字符串:");
        String str = sc.nextLine();
        //书写对象调方法 并 接收返回值时,可以直接写对象.方法; 之后使用快捷键补齐Ctrl+Alt+V
        int isc = sc.nextInt();

        //输出字符串
        System.out.println("输入的字符串是:" + str);
    }
}

注意:
调用方法的时候,如果方法有明确的返回值,需要用变量接收
可以手动完成,也可以使用快捷键Ctrl + Alt + V

书写对象调方法 并 接收返回值时,可以直接写对象.方法; 之后使用快捷键补齐Ctrl+Alt+V
        int isc = sc.nextInt();

也就是先写 sc.nextInt();  之后使用快捷键Ctrl + Alt + V 实现 int isc = sc.nextInt();
String String概述

软件包在java.long包下——使用时不需要导包String类代表字符串,java程序中的所有字符串文字都被实现为此类的对象。例如“abc”就是String类的对象 = java程序中所有双引号字符串都是String类的对象。特点:
①字符串不变,在创建后不能被更改;
②String的值不可以更改,但是它们可以被共享;
③字符串效果上相当于字符数组(char[]),但是底层原理是字节数组(byte[]);JDK8以及之前是字符数组,JDK9及以后是字节数组。 String构造方法 方法名说明public String()创建一个空白字符串对象,不含有任何内容public String(char[] chs)根据字符数组的内容,来创建字符串对象public String(byte[] bys)根据字节数组的内容,来创建字符串对象String s = “abc”直接赋值的方式创建字符串对象,内容就是abc

推荐直接使用直接赋值的方式创建字符串对象
案例:

public class StringDemo {
    public static void main(String[] args){
        //通过无参构造方法创建对象
        String str = new String();
        System.out.println("str:" + str);//输出str:

        //通过 String(char[] chs),通过字符数组创建字符串对象
        //创建字符数组
        char[] arr = {'a','b','c'};
        String str1 = new String(arr);
        System.out.println("str1:" + str1);//输出str1:acx

        //通过String(byte[] bys),通过字节数组创建字符串对象
        byte[] bys = {97,98,99};//字节数组存储内容是数据,也就是字符在计算机低层存储的对应值。97对应的是a
        String str2 = new String(bys);
        System.out.println("str2:" + str2);//str2:abc

        // 直接通过 = “字符串”
        String str3 = "abc";
        System.out.println("str3:" + str3);//str3:abc
    }
}
String对象的特点

通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同。

char[] chs = {'a','b','c'};
String s1 = new String(chr);
String s2 = new String(chr);

解释:JVM会首先创建一个字符数组,然后每一次new的时候都会有一个新的地址,只不过s1和s2参考的字符串内容是相同的。

以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池中维护。

String s3 = “abc”;
String s4 = “abc”;

理解:针对第一行代码,JVM会建立一个String对象放在字符串池中,并给s3参考;第二行则让s4直接参考字符串池中的String对象,也就是说它们本质上是通一个对象。

内存示例图:
提到常量池

案例:

public class StringDemo1 {
    public static void main(String[] args){
        //通过构造方法创建对象
        char[] chs = {'a','b','c'};
        String str1 = new String(chs);
        String str2 = new String(chs);
        System.out.println(str1 == str2);//false

        //通过字符串直接赋值的方式创建对象
        String str3 = "abc";
        String str4 = "abc";
        System.out.println(str3 == str4);//true
        System.out.println(str1 == str3);//false
    }
}
String的比较 使用==做比较

基本类型:比较的是数据值是否相同引用类型:比较的是地址值是否相同 字符串比较内容

由于字符串是引用类型,使用==符号只能比较地址是否相同。字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法叫equals()

public boolean equals(Object anObject)
将此字符串与指定对象进行比较,由于比较的是字符串,所以参数直接传递一个字符串。

案例:字符串对象的地址、内容比较

//字符串地址 内容的比较
public class StringDemo2 {
    public static void main(String[] args){
        //构造方法得到对象
        char[] chs = {'a','b','c'};
        String str1 = new String(chs);
        String str2 = new String(chs);

        //直接赋值得到的对象
        String str3 = "abc";
        String str4 = "abc";

        //比较地址
        System.out.println(str1 == str2);//false
        由于采用构造方法的方式得到对象,不同的对象会在堆内存中开辟不同的存储空间,所以地址不一样。
        System.out.println(str3 == str4);//true
        采用直接赋值的方式,字符串会在堆内存中的常量池存储,对应有地址;
        使用直接赋值的方式,若两个对象所要赋值的字符串相同(顺序以及大小写相同),那么两个对象在栈内存所存储的堆内存的地址是一样的。
        System.out.println(str1 == str3);//false
        构造方法创建对象、直接赋值方法创建对象都会另开辟内存空间的。
        System.out.println("-----------");

        比较内容,主要判断字符串中字符的顺序和大小写是否一致。
        System.out.println(str1.equals(str2));//true
        System.out.println(str1.equals(str3));//true
        System.out.println(str3.equals(str4));//true
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5703736.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存