在java中,有两种创建String类型变量的方式:
String str01="abc";//第一种方式 String str02=new String("abc");//第二种方式
第一种方式创建String变量时,首先查找JVM方法区的字符串常量池是否存在存放"abc"的地址,如果存在,则将该变量指向这个地址,不存在,则在方法区创建一个存放字面值"abc"的地址。
第二种方式创建String变量时,在堆中创建一个存放"abc"的对象,使变量str02指向堆中的对象。
根据上面的创建方式,观察下面的示例:
String str01 = "abc"; String str02 = "abc"; String str03 = new String("abc"); String str04 = new String("abc"); System.out.println("str01==str02:" + (str01 == str02)); System.out.println("str03==str04:" + (str03 == str04)); System.out.println("str01==str03:" + (str01 == str03));
分析:
1、在创建str01时,方法区的字符串常量池中没有存储"abc"的地址,就在常量池中创建一个存放"abc"的地址,使变量str01指向该地址。创建str02时,字符串常量池已存在存放"abc"的地址,将str02变量指向该地址,此时str01与str02指向同一内存地址,所以"str01==str02"为true。
2、使用new关键字创建对象时,每一次都会在堆中创建一个新的对象,所以str03与str04指向对象的地址不同,"str03==str04"为false。
3、str01指向方法区,str03指向堆,所以"str01==str03"为false。
String对象被设计成不可改变的对象,即String对象所包含的字面值发生改变时,会开辟一个新的地址,创建一个新的对象,原地址不变。
String str01 = "abc"; String str02 = "abc"; str01="def";
在方法区的字符串常量池中建立一个新的存储"def"的地址,str01指向该地址,str02的指向不变。
以上这篇基于String变量的两种创建方式(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
问题内容: 在 《 Swift编程语言》 (Apple书)中,我读到可以用两种方式创建可选变量:使用问号(?)或使用感叹号(!)。 区别在于,当使用(?)获得可选值时,每次需要该值时都必须使用感叹号: 使用(!)时,您可以不带后缀: 有什么区别?如果根本没有区别,为什么有2种方法呢? 问题答案: 当两个类相互指向并且您需要避免强引用循环时,使用隐式解开的可选变量(用!声明)的真正好处与类初始化有关
本文向大家介绍javascript中createElement的两种创建方式,包括了javascript中createElement的两种创建方式的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript中createElement的两种创建方式。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮助。
本文向大家介绍Java创建线程的两种方式,包括了Java创建线程的两种方式的使用技巧和注意事项,需要的朋友参考一下 前言 多线程是我们开发过程中经常遇到的,也是必不可少需要掌握的。当我们知道需要进行多线程开发时首先需要知道的自然是如何实现多线程,也就是我们应该如何创建线程。 在Java中创建线程和创建普通的类的对象操作是一样的,我们可以通过两种方式来创建线程: 1、继承Thread类,并重写run
本文向大家介绍EasyUI创建对话框的两种方式,包括了EasyUI创建对话框的两种方式的使用技巧和注意事项,需要的朋友参考一下 对话框(Dialog)是一个特殊的窗口(window),可以包含在顶部的工具栏和在底部的按钮。默认情况下,对话框(Dialog)不能改变大小,但是用户可以设置 resizable 属性为 true,使其可以改变大小。 这种就是对话框了。 EasyUI有两种创建方式: 第一
本文向大家介绍python线程的几种创建方式详解,包括了python线程的几种创建方式详解的使用技巧和注意事项,需要的朋友参考一下 Python3 线程中常用的两个模块为: _thread threading(推荐使用) 使用Thread类创建 说明:主线程会等待所有的子线程结束后才结束 使用Thread子类创建 为了让每个线程的封装性更完美,所以使用threading模块时,往往会定义一个新的子
本文向大家介绍Go语言变量创建的五种方法,包括了Go语言变量创建的五种方法的使用技巧和注意事项,需要的朋友参考一下 对于只有 Python 语言经验的朋友,也许会不太理解声明这个词,在 Python 中直接拿来就用,也不用声明类型啥的。 Go 语言是静态类型语言,由于编译时,编译器会检查变量的类型,所以要求所有的变量都要有明确的类型。 变量在使用前,需要先声明。声明类型,就约定了你这个变量只能赋该