iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java基础之String知识总结
  • 622
分享到

java基础之String知识总结

2024-04-02 19:04:59 622人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、概念二、特点三、三种构造方式:四、字符串常量池一、概念 String代表字符串,java语言中所有双引号的字符串都是String的对象,不管是否是new出来的对象。 二、特点

一、概念

String代表字符串,java语言中所有双引号的字符串都是String的对象,不管是否是new出来的对象。

二、特点

1.String类由于被final修饰,因此其不能被继承,注意一下哈,我开始也以为字符串不能够改变是因为其被final修饰,事实上并不是这样,String底层是用char数组保存,它被final修饰只是不能够改变地址指向,但是其内容是可以改变的。因此字符串不能改变和其是否被final修饰没有关系。

2.字符串由于不能被改变,因此其能共享使用。

3.字符串底层使用char[]数组存储。

三、三种构造方式:

1.public String():创建空字符串对象

2.public String(char[] array):使用char数组创建字符串

3.public String(byte[] array):使用byte数组创建字符串,这种方式将对应数字按照ASCII码转成字符,如97代表字符a
一种直接创建:String str = “abc”

四、字符串常量池

jdk1.6及之前,字符串常量池是在方法区内,jdk1.7及之后字符串常量池从方法区分离出来,存储在堆中。

jdk1.6和jdk1.7的相同点:

1.用双引号创建字符串在JVM运行时都直接在字符串常量池中创建字符串对象,但是不会在堆中创建对象;

2.new一个字符串对象(String s = new String(“abc”)),这里面涉及两个对象的创建,一个是堆对象,一个是字符串常量池中的对象(“abc”是用双引号的),如果字符串常量池存在与该字符串相同的对象(这里是指内容相同,而不是地址)则只需要创建一个堆对象,如果字符串常量池没有相同的对象,那么需要在字符串常量池和堆内都要创建对象,注意一点:这两个对象之间不存在引用,即其中一个对象保存的值是另一个对象的地址。


String test1 = "test";
        String test3 = "test";
        String test2 = new String("test");
    
        System.out.println(test1 == test2);//false
        System.out.println(test1 == test3);//true

第一个输出是false是因为test1是字符串常量池中的对象,而test2是堆中的对象,因此他们的地址是不相等,故结果是false;第二个输出为true是因为当用双引号创建字符串时,首先会去字符串常量池中查找是否存在值相同得到对象,如果存在就直接返回引用地址,如果不存在才创建对象,因此test1和test3指向的是同一个地址。

jdk1.6和jdk1.7的不同点:

jdk1.6的字符创常量池存储是对象,jdk1.7字符常量池中既可以存储对象,又可以存储对象的引用。

还需要明确一点:
使用引号包含文本的方式创建的String对象之间使用“+”连接产生的新对象才会被加入字符串池中,对于所有包含new方式新建对象(包括null)的“+”连接表达式,它所产生的新对象都不会被加入字符串池中


String s6 = new String("Go") +new String("od");
        String s7 = s6.intern();
        String s8 = "good";
        System.out.println(s6 == s7);//true
        System.out.println(s7 == s8);//true
        System.out.println(s6 == s8);//true

右上面的介绍可知,s6指向的是堆中字符串good对象的地址,且这个对象没有在字符串常量池中被创建,当执行到 String s7 = s6.intern();时由于字符创常量池没有这个对象,且堆中存在该对象,因此在字符串常量池中创建一个引用指向堆中的对象,所以s6和s7指向同一个对象,如果是jdk1.6,会直接在字符串常量池创建一个对象然后返回这个对象的引用,此时s6和s7指向的是不同的对象。


 String s2 = new String("lo") + new String("ng");
        String s3 =  s2.intern();
        System.out.println(s2 == s3);//false

这里按照上面的分析应该返回true,但是这里返回false,原因如下:

在这里插入图片描述

到此这篇关于Java基础之String知识总结的文章就介绍到这了,更多相关Java String内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: java基础之String知识总结

本文链接: https://www.lsjlt.com/news/126488.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java基础之String知识总结
    目录一、概念二、特点三、三种构造方式:四、字符串常量池一、概念 String代表字符串,java语言中所有双引号的字符串都是String的对象,不管是否是new出来的对象。 二、特点...
    99+
    2022-11-12
  • Java基础知识总结之继承
    目录一、继承的基本概念二、继承的好处和弊端三、继承中变量访问的特点四、super关键字五、继承中构造方法的访问特点六、继承中成员方法的访问特点七、方法重写八、包九、修饰符十、stat...
    99+
    2022-11-12
  • java基础之泛型知识点总结
    目录一、什么是泛型?为什么要使用泛型? 二、泛型的特性是什么?三、泛型的使用方式 四、Java中的泛型通配符一、什么是泛型?为什么要使用泛型? 泛型,即“参数化...
    99+
    2022-11-12
  • Java基础之位运算知识总结
    目录一、位运算的分类与展现效果二、原理三、边界值测试一、位运算的分类与展现效果 java位运算可以分为左移和右移,其中右移还有无符号右移。   java只对整型位移,可...
    99+
    2022-11-12
  • JAVA基础知识点总结
    文章目录 前言一、JAVA简介二、基础语法面向对象StringIntegerObject异常IO序列化Java 泛型注解反射 前言 一、JAVA简介 Java 是一门面向对象的编程语言。 语言特点:面向对象,平台无关性,支持多...
    99+
    2023-08-18
    java jvm 开发语言
  • Java基础之并发相关知识总结
    目录一、Java并发是什么?二、怎么做?三、分工四、同步五、互斥六、总结一、Java并发是什么? 用学术定义来说就是 并发:同一时间段,多个任务都在执行 (单位时间内不一定同时执行...
    99+
    2022-11-12
  • Java基础之Math和Random类知识总结
    java的Math类 java中的java.lang.Math类可以直接使用,不需要导包,在JDK的API 中看到Math类被final修饰着,那么说明了这个Math类不能被继承,...
    99+
    2022-11-12
  • Java基础之引用相关知识总结
    目录一、引用的定义二、问题三、引用的分类四、应用场景五、源码六、总结一、引用的定义 在JDK 1.2以前,Java中的引用定义很传统:如果reference类型的数据存储的数值代表的...
    99+
    2022-11-12
  • Spring5学习之基础知识总结
    目录1.概述2.入门Demo3.源码1.概述 1、Spring 是轻量级的开源的 JavaEE 框架 2、 Spring 可以解决企业应用开发的复杂性 3、Spring 有两个核心部...
    99+
    2022-11-12
  • Java基础之线程锁相关知识总结
    一、 synchronized关键字 1.对象锁 a.当使用对象锁的时候,注意要是相同的对象,并且当有线程正在访问对象锁内部的代码的时候,其他线程无法访问。(注意无法访问的范围)。 ...
    99+
    2022-11-12
  • Java基础之逻辑运算符知识总结
    目录一、前言二、逻辑运算符三、代码四、结果五、练习一、前言 逻辑运算符 左右都是布尔类型的操作数,表达式的结果也是布尔类型 true或false 二、逻辑运算符 &...
    99+
    2022-11-12
  • Java基础学习之字符串知识总结
    目录一、前言二、String 类(字符串常量)2.1 String 类实例的创建2.2 String 对象的比较2.3 String对象的空值2.4 字符串拼接三、StringBui...
    99+
    2022-11-12
  • Java基础之数组超详细知识总结
    目录一、一维数组二、二维数组三、总结一、一维数组 1、Java语言中的数组是一种 引用数据类型。不属于基本数据类型。数组的父类是 Object。 2、数组实际上是一个容器,可以同时容...
    99+
    2022-11-12
  • 总结CSS基础知识
    本篇内容主要讲解“总结CSS基础知识”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“总结CSS基础知识”吧!一、CSS简介css:层叠样式表 英文全名:casca...
    99+
    2022-10-19
  • canvas基础知识总结
    本篇内容主要讲解“canvas基础知识总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“canvas基础知识总结”吧!1、填充矩形 fillRect(x,y,w...
    99+
    2022-10-19
  • nodejs基础知识总结
    这篇文章主要讲解了“nodejs基础知识总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“nodejs基础知识总结”吧!什么是nodejsnode.js是基...
    99+
    2022-10-19
  • react基础知识总结
    目录前言 开始 React 生命周期 React Fiber React setState React 事件机制 前言 最近在准备面试。复习了一些react的知识点,特此总结。 开...
    99+
    2022-11-12
  • HTML基础知识总结
    目录标签分类常用标签表单框架 常用的布局组合标签HTML4和HTML5的区别:HTML5 中新增的语义标签 - 了解HTML5 新的表单属性 form 新属性input 新...
    99+
    2022-11-12
  • C#基础知识总结
    这篇文章主要讲解了“C#基础知识总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#基础知识总结”吧!C#基础知识之new 修饰符是起什么作用?new 修饰符与 new 操作符是两个概念,...
    99+
    2023-06-18
  • python基础知识总结
    ...
    99+
    2023-01-31
    基础知识 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作