String创建方式的区别

String str0 = "abc";

String str1 = new String("abc");

第一句执行后,会在String pool中创建一个"abc",str0引用这个pool里的"abc"。

第二句执行后,不管池中有没有"abc",都会在堆里创建一个"abc",并返回其引用。

String str0 = "helloworld";
String str1 = "helloworld";
System.out.println(str0 == str1);    //true
System.out.println(str0.equals((str1)));    //true

String str5 = new String("hello");
 String str6 = new String("hello");
 System.out.println(str5 == str6);    //false
 System.out.println(str5.equals((str6)));    //true

搞不懂:

串池到底在哪个区域?栈内存?

执行new String("abc")时,若串池中没有"abc",到底在串池中创建"abc"吗?

时间: 2024-11-12 17:38:34

String创建方式的区别的相关文章

SQL学习笔记——临时表不同创建方式的区别

问题:在存储过程中使用临时表时,不Create临时表就会报错. 分析了下,总结了临时表创建方式的区别. 创建临时表有两种方法: 方法一 create  table  #临时表名 ( 字段1 约束条件,      字段2 约束条件,      -- ) create  table  ##临时表名 ( 字段1 约束条件,      字段2 约束条件,      -- ) 方法二 select  *  into  #临时表名  from 你的表;   select  *  into  ##临时表名  

Java中String两种不同创建方式的区别及intern的用法

一, Java有两种创建字符串的方式, String str1 = "abc"; String str2 = new String("abc"); 用双引号创建和用new来创建.这两种方式创建出来的String存储的位置上不同的.当使用双引号方式时,相当于显式的声明了字符串的值(字面值),所以是作为一个常量,存储在方法区的常量池中.使用new方式来创建String时,JVM会在堆上分配一块区域,存储一个String对象,值为“abc”. 二, String的==和e

Java中String的两种赋值方式的区别

本文修改于:https://www.zhihu.com/question/29884421/answer/113785601 前言:在java中,String有两种赋值方式,第一种是通过"字面量"赋值,如:String str="hello",第二种是通过new关键字创建新对象,如:String str=new String("hello").那么这两种赋值的方式到底有什么区别呢,下面给出具体分析. 1.首先回顾Java虚拟机的结构图. 在上面的

String变量的两种创建方式

在java中,有两种创建String类型变量的方式: String str01="abc";//第一种方式 String str02=new String("abc")://第二种方式 第一种方式创建String变量时,首先查找JVM方法区的字符串常量池是否存在存放"abc"的地址,如果存在,则将该变量指向这个地址,不存在,则在方法区创建一个存放字面值"abc"的地址. 第二种方式创建String变量时,在堆中创建一个存放&q

js 对象的创建方式和对象的区别

js一个有三种方法创建对象,这里做一个总结. 1.对象直接量 所谓对象直接量,可以看做是一副映射表,这个方法也是最直接的一个方法,个人比较建议, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 //创建简单对象 var obj1 = {}; //空对象 var obj2 = {   name: "ys",   age: 12 }; //创建复杂对象 var obj3 = {   name: "ys",   age

UIImage创建图片的两种方式的区别

在工作中经常会遇到添加图片,用哪种方式添加更好呢?请看详解 方法一: UIImage *image = [UIImage imageNamed:@"haha"]; 这种方法创建的图片是从缓存中获取的,程序会先从缓存中查找是否有这张图片,如果有的话就加载,如果没有的话,会将图片添加到缓存再使用.这样的创建方式一般用于经常使用的使用,因为从缓存中添加图片会更快一些,节省时间.但是缺点是一旦添加到缓存中就不会被释放,如果图很多很大需要占用很多很大的内存空间. 方式二: NSString *p

JAVA学习第二十三课(多线程(二))- (多线程的创建方式二 :实现Runnable接口(常用))

当一个类有父亲,但是其中的功能还希望实现线程,那么就不能采用继承Thread的方式创建线程 那么就可以通过接口的方式完成 准备扩展Demo类的功能,让其中的内容可以作为线程的任务执行 实现Runnable接口,Runnable接口中只有一个方法run 一.创建线程的第二种方法 Runnable的出现仅仅是将线程的任务进行了对象的封装 /* * 创建线程的第二种方法 * 1.定义类实现Runnable接口 * 2.覆盖接口中的fun方法,将线程的任务代码封装到run方法中 * 3.通过Thread

Android ProcessBuilder与Runtime.getRuntime().exec分别创建进程的区别

在Android中想要进行Ping,在不Root机器的情况下似乎还只能进行底层命调用才能实现. 因为在Java中要进行ICMP包发送需要Root权限. 于是只能通过创建进程来解决了,创建进程在Java中有两种方式,分别为: 1. 调用ProcessBuilder的构造函数后执行start() 2. 用Runtime.getRuntime().exec()方法执行 经过使用后发现两者有区别但是也并不是很大,两个例子说明: 1.调用ProcessBuilder的构造函数后执行start(): Pro

Java---11---多线程的两种创建方式

多线程的两种创建方式: 下面这些东西是API文档中的: public class Thread extends Object implements Runnable 线程 是程序中的执行线程.Java 虚拟机允许应用程序并发地运行多个执行线程. 每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程.每个线程都可以或不可以标记为一个守护程序.当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护