String类(1)

原创 2016年06月01日 11:07:28

首先来看一个这样的问题:

Endeavor来和大家分析一下这个问题:
1、String str = “hello”;这种方式创建字符串的时候,JVM首先会检查字符串常量池中是否存在该字符串的对象。如果存在,那么就不会在字符串常量池中在进行创建,直接返回该对象在字符串常量池中的内存地址。如果不存在,则会在字符串常量池中先进行“hello”对象的创建,再返回该对象的内存地址。
2、String str = new String(“hello”);这种方式创建字符串的时候,JVM首先会检查字符串常量池中是否存在该字符串的对象。如果存在,那么就不会在字符串常量池中在进行创建。如果不存在,则会在字符串常量池中先进行“hello”对象的创建,然后还会再去堆内存中再创建一个字符串的对象,然后把常量池中的对象内容拷贝到堆内存中,然后返回堆内存中该字符串的内存地址。
图例分析:

3、为什么equals()方法返回值也是true呢?
原因是这样的:
1)首先 “==”用于比较引用数据类型数据的时候比较的是两个对象的内存地址,equals方法默认情况下比较也是两个对象的内存地址。
2)但是String这个类自动重写了Object类的equals()方法,尽用来比较字符串的内容是否相等,口说无凭,来大家看下源代码就懂了。

附加一个笔试题目:new String(“abc”)创建了几个对象?
答:两个对象, 一个对象是位于字符串常量池中,一个对象是位于堆内存中。

下面来看这样一道题,通过这道题给大家介绍一个小技巧:

对比:

用“==”一切正常,哪怕使用了null,但是当使用equals()方法的时候就会报空指针异常,如何避免这个问题呢?

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java学习总结11——基础类库1(String相关类)

1.Stringxiang'jie String类是Java中最常用的对象之一

string类 成员函数简单示例(1)

/* 比较2个string对象的大小,并输出。 * */ # include # include using namespace std; int main(){ string str1, s...

Java基础回顾_常用类_String常用1

package String类; import java.util.Date; /** * * TODO String类使用 * * @author qiqitrue * @vers...

一些简单的帮助类(1)-- String的类型验证

 在工作中经常会遇到 验证String 中的值是否属于Int型或者是Bool又或是Date 一般的做法是用方法 类型.TryParse(string,类型) 来做验证.         ...

String类1

public class Test01 { public static void main(String[] args) { //串池中创建 Hello Str...

java基础学习API之String类 六-1

类 String String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。在 lang包下,所以不需要导包。API介绍: 构造方法; pac...

微软2014实习生及秋令营技术类职位在线测试(题目1 : String reorder)

题目1 : String reorder 时间限制:10000ms 单点时限:1000ms 内存限制:256MB Description For ...

QLatin1String类的学习

好久没看Qt,今天突然看了一下,因为看别人的代码,我自己想修改一下,发现只要用到字符串就会报错, 就连 QString str = “hello”; 也会报错,灰常的迷茫,后来查了一下才发现 在...

c++中String类(1)

string类的构造函数:string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 此外,string...

微软2014实习生及秋令营技术类职位在线测试 题目1 : String reorder

题目1 : String reorder 时间限制:10000ms 单点时限:1000ms 内存限制:256MB Description For this question, y...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)