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()方法的时候就会报空指针异常,如何避免这个问题呢?

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

String类为什么是final的

首先,先得清楚 final 这个关键字。  final的出现就是为了为了不想改变,而不想改变的理由有两点:设计(安全)或者效率。 final 修饰的类是不被能继承的,所以 final 修饰的类是不能被...
  • qq_27093465
  • qq_27093465
  • 2016年08月12日 13:44
  • 8848

C/C++面试题:编写类String的构造函数、析构函数和赋值函数。

考点:构造函数、析构函数和赋值函数的编写方法 出现频率:☆☆☆☆☆ 已知类String的原型为:         class String         {         public:...
  • zz460833359
  • zz460833359
  • 2015年06月26日 16:26
  • 1501

C++ String类的构造函数、拷贝构造函数的实现

构造函数、析构函数与赋值函数是每个类最基本的函数,在一些公司的面试中也会经常问到这方面的问题。每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)...
  • u011000290
  • u011000290
  • 2015年10月10日 10:51
  • 3240

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

package StringReorder; import java.io.BufferedInputStream; import java.util.Scanner; import java.ut...
  • lsp1991
  • lsp1991
  • 2014年04月12日 21:18
  • 1020

第16章part1-标准string类

C++
  • robinhjwy
  • robinhjwy
  • 2017年12月06日 16:18
  • 36

自我实现一个简洁版的String类——1

在C++中有C没有的string字符串类型,string类型的数据其实是一个指向字符串首地址的指针变量,因此在string类的默认成员函数拷贝构造和赋值运算符的重载就会涉及到深浅拷贝的问题,一不小心要...
  • Miss_Bread
  • Miss_Bread
  • 2017年10月20日 20:40
  • 45

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

1.Stringxiang'jie String类是Java中最常用的对象之一
  • gaohe7091
  • gaohe7091
  • 2014年06月15日 22:35
  • 423

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

/* 比较2个string对象的大小,并输出。 * */ # include # include using namespace std; int main(){ string str1, s...
  • quanspace
  • quanspace
  • 2013年01月29日 21:56
  • 224

java学习之路--java对象(1)--重点String类的常用方法

第五章: 1.面向对象的特征         (1):封装性         (2):多态         (3):继承 Java多态分为:方法重载和对象多态两种   这里说下对象多态:子类对象可...
  • likeaijiaqi
  • likeaijiaqi
  • 2013年11月16日 23:34
  • 823

15-03-常用对象API(String类-常见功能-获取_1)

package cn.itcast.string.demo; public class StringMethodDemo { public static void main(String[] a...
  • wy_0928
  • wy_0928
  • 2015年08月10日 22:48
  • 483
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:String类(1)
举报原因:
原因补充:

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