String Class - 字符串类型 - 上半部分讲解

前言

字符串:C语言里面 是 没有字符串类型的!
但是,在 JavaC++ 里,有字符串类型【String

什么是字符串?什么是字符?

使用双引号,且双引号中包含任意数量的字符【“abcdef”,“a”】,就是字符串。
使用单引号,且单引号中,只包含一个字符【‘a’,‘强’】,就是字符。

要注意:
在这里插入图片描述
创建字符串

创建方法与创建数组,几乎一样。

第一种直接赋值
在这里插入图片描述
第二种: 调用构造方法进行构造对象(就是去new一个)

在这里插入图片描述
第三种:

public class Test {
    public static void main(String[] args) {
        char[] chars = {'a','b','c'};
        String str3 = new String(chars);
        System.out.println(str3);

    }
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/bf4f50a8cfb1443e9ec6f7dd0fbee37c.png)

了解字符串类型

按住Ctrl,点击String,进入String
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
根据上图,我们发现对于字符串来说,有两个属性,一个是char 类型的 value数组(此时这个数组,只是一个变量【引用类型】,没有给这个数组,分配内存。也没有new)。一个是 哈希码。
在这里插入图片描述

这里先给大家打个底,后面,我会详细讲解.。
我们先来搞懂String的对象(通过创建字符串的第三种方法)
String 常用的构造方法就是数组
在这里插入图片描述在这里插入图片描述
效果图
在这里插入图片描述
在这里插入图片描述
例题2: 将例题1中的 str,重新赋值会不会影响 str2的输出结果?
在这里插入图片描述
在上面两个例题中,我们需要搞懂:字符串常量是不能被改变的

下面,我们来更深层次的分析一下为什么字符串不能被修改
实例1

import java.util.Arrays;

public class Test {
    public static void func(String s,char[] array){
        s = "author";
        array[0] = 'p';
    }
    public static void main(String[] args) {
        String str = "abcd";
        char[] chars = {'y','o','u'};
        func(str,chars);
        System.out.println(str);
        System.out.println(Arrays.toString(chars));
    }
}

在这里插入图片描述
结论:
不是说 转引用 就能改变实参的值。
你要看,到底这个引用干了什么!

实例二

public class Test {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = new String("hello");
        System.out.println(str1 == str2);
    }
}

在这里插入图片描述
在这里插入图片描述

实例三

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "hello";
        System.out.println(str1==str2);
    }
}

在这里插入图片描述
在这里插入图片描述
实例四

public class Test {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "he"+"llo";// 注意:此时两个字符串都是常量,且在编译的时候就已经确定了是"hello"
        // 简单来说像这种 直接拿两个字符串常量来拼接的,在编译时,就默认是拼接好了的,或者说 默认就是一个完整的字符串常量
        System.out.println(str1 == str2);
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实例5

public class Test {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "he";
        String str3 = str1+"llo";
        System.out.println(str1 == str3);
    }
}

在这里插入图片描述
字符串比较
在这里插入图片描述
如果是引用类型变量之间的比较,且使用双等号来比较的话,比较的就是引用变量存储的地址。相信大家应该明白,上面的例题就是这样比较的。

equals
语法 调用者.equals();
如果调用是引用类型的数据,就需要注意,调用者不能空引用/空指针。防止出现空指针异常错误
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
拓展
在Java中,new String类型数据的时候,是不会存在内存重叠的情况,在Java中,字符串是一个对象,而我们new String 对象时,是产生一个新的对象,如果产生的对象是一样的,那还叫新对象??

String 类型的数据不可变
在这里插入图片描述
数组的整体赋值 ,在Java中,只有一次机会,就是在定义数组的时候。

字符串拼接

;public class Test2 {
    public static void main(String[] args) {
        String str = "hello";
        str =str + " world";
        str+="!!!";
        System.out.println(str);
    }
}

在这里插入图片描述@TOC

ok目前上半部分结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值