Java学习里程-----Java基础_17String类(上)

一、什么是String

实际上我们已经用过很多次了,但是我们今天要系统的学习一下它,因为我们以后呢,经常会用这个。

String被翻译过来是“串”的意思,在Java中是字符串的意思。就好比我们说的话,这就是一串文字。

二、String和char的区别

char可以这样去理解,就是每一个字母、好比 a,b,c 这些个单独的字母符号数字,都是char,我们也可以通过在Java中创建能看出来,char每次只能定义一个字符,不可能是俩。

String呢,就好比是将char这些个字符组成的单词,语句。

因为在我们编程的过程中,char的效率太低了,所以我们引入了String来代替char,但是这并不是表示char没有用啊!

三、如何使用

使用方式很简单,我们先创建一个类,我们叫StringTest,String测试类。

在里面我们定义一个String变量。这里有两种实例化的方式。我们一起来:

这样就定义好了,但是他们的区别是什么呢?我们下面去说,这里先不说。

接着我们输出一下这俩变量。

so easy。一下就输出出来了。

四、实例化Stirng时两种方式的区别

实例化String时,有两种方法,我们一个一个说:

首先来说(String name1 = "胖皮球";)这种的,这样的实例化方式,我们称为隐式实例化,直接赋值,一般我们编程都是这样去写,因为相比下面内种,我们可以少些很多字母。但这个不是重点。

这种实例化方式呢,是在JVM在编译Java文件生成Class文件时,将字符串"胖皮球"添加到字符串常量池中,然后,给name1一块内存,让它指向这个字符串的内存地址。

第二种方式(String name2 = new String("瘦皮球");),这样是用的构造函数,不知道大家有没有印象,我们之前学习的构造函数,在这里提现了。这种方式叫显式实例化,它呢,是在运行之后,将“瘦皮球”存放在堆内存中,然后,给name2创建一块内存,让它指向这个瘦皮球的内存地址。

所以,这两种实例化方式是不同的。我们上个图:

大概画了一个图,他们在内存中就是这个样子。

我们在操作这两种方式实例化String对象的时候,建议用直接赋值的方式,因为直接赋值的速度要大于另外一种方式。

原因是这样的:new String("瘦皮球") 实际上是做了两次操作。为啥这么说,是做了两次操作?是这样,在Java中,new出来的对象,要在内存中开辟一块空间去做存储,而,new String(“瘦皮球”),就是相当于在堆内存中给他开辟出一块空间去做存储,但是呢,String还会将这个“瘦皮球”作为常量再存放到常量池中。这么一来,就相当于做了两次操作,相比隐式实例化,它只做了一次操作,所以我们会推荐去使用这种方式去实例化String。

而且还有一点要说明,如果常量池中存在胖皮球了,如果下面再有隐式实例化,那么就不会再去创建了,而是直接指向这个常量。

五、== 与 equals

这两个东西在面试的时候会经常被问到,属于Java最基础的知识点,都是作为比较存在的。

== 是 一种运算符,而equals是方法,这是他俩的第一个不同点。

== 比较的是 运算符左面的变量和右面的变量所指向的引用指向是否相同,而equals是比较的两个值是否相同。

我们这么说大家肯定会蒙圈的,我们上代码:

我们看这段代码,你们会觉得输出什么,大部分人都会说,都是1,肯定是输出 a==b喽。我们呢,直接运行看结果。

???为啥不相等呢,原因我上面说了,== 是比较的引用,很明显一个在常量池,一个在堆,肯定不相同了。这时候我们在用一下equals:

诶,这个为啥又相同了?因为啊,equals是比较两个具体的值,也就是比较的是1 和1 这俩是不是一样的,很明显,是一样的。

我们这里给出一个图:

==比较是这样比较的

而equals是这样的:

直接看源码,相同就返回true,不一样,就返回false。

六、字符串内容

Java中,String创建的字符串内容是有不可变性。如果想改变,只能从新指向一个新地址。

我们来看代码:

看这四次输出:

第一次我们可以知道,因为两个name都是指向的同一个常量池中的东西,所以我们判断引用,他们是一样的,这个是没有问题的。

第二次,输出就是输出字符串,用来表示name已经换值了。

第三次输出我们可以看到,这俩指向的地址不一样了,因为一个是指向胖头鱼,一个是胖头鱼真香。

第四次输出,我们让其中的name指回胖头鱼这个常量,发现,他俩的引用一样了。

通过这四个说明,这个字符串常量是不可变的,而且如果变,是必须要指向一个新的地址。

 

东西有点多,我们分上下讲,明天更新下一讲。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

他 他 = new 他()

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值