Java String 和 new String()的比较与区别
Java String 和 new String()的区别
栈区存引用和基本类型,不能存对象,而堆区存对象。==是比较地址,equals()比较对象内容。
String str1 = "abcd"的实现过程:首先栈区创建str引用,然后在String池(独立于栈和堆而存在,存储不可变量)中寻找其指向的内容为"abcd"的对象,如果String池中没有,则创建一个,然后str指向String池中的对象,如果有,则直接将str1指向"abcd"";如果后来又定义了字符串变量 str2 = "abcd",则直接将str2引用指向String池中已经存在的“abcd”,不再重新创建对象;当str1进行了赋值(str1=“abc”),则str1将不再指向"abcd",而是重新指String池中的"abc",此时如果定义String str3 = "abc",进行str1 == str3操作,返回值为true,因为他们的值一样,地址一样,但是如果内容为"abc"的str1进行了字符串的+连接str1 = str1+"d";此时str1指向的是在堆中新建的内容为"abcd"的对象,即此时进行str1==str2,返回值false,因为地址不一样。
String str3 = new String("abcd")的实现过程:直接在堆中创建对象。如果后来又有String str4 = new String("abcd"),str4不会指向之前的对象,而是重新创建一个对象并指向它,所以如果此时进行str3==str4返回值是false,因为两个对象的地址不一样,如果是str3.equals(str4),返回true,因为内容相同。
不多说,直接上代码:
String str1 = "abcd"; String str2 = "abcd"; String str3 = new String("abcd"); String str4 = new String("abcd"); System.out.println(str1==str2);//true地址一样 System.out.println(str3==str4);//false,但地址不一样 System.out.println(str3.equals(str3));//true,值一样 System.out.println(str2.equals(str3));//true,值一样 System.out.println((str1+"a")==(str2+"a"));//false;进行了+连接地址不一样
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
java 中InputStream,String,File之间的相互转化对比
InputStream,String,File相互转化 1. String --> InputStream InputStream String2InputStream(String str){ ByteArrayInputStream stream = new ByteArrayInputStream(str.getBytes()); return stream; } 2. InputStream --> String String inputStream2String(InputStre
-
Java 中 String,StringBuffer 和 StringBuilder 的区别及用法
1 简介 在 Java 语言中,共有 8 个基本的数据类型,分别为:byte.short.int.long.float.double.boolean 和 char,其中 char 类型用于表示单个字符,例如 a.b.c .A.B.C.& 这些大小写字母或者特殊字符等等.在实际的编程中,单个的字符并没有我们想象中用的那么频繁,反而是多个字符组成的"字符串"更为常见,但是在基本的数据类型中,并没有字符串这种数据类型.为了解决这个问题,Java 语言为我们提供了一个被 final 关
-
Java Base64位编码与String字符串的相互转换,Base64与Bitmap的相互转换实例代码
首先是网上大神给的类 package com.duanlian.daimengmusic.utils; public final class Base64Util { private static final int BASELENGTH = 128; private static final int LOOKUPLENGTH = 64; private static final int TWENTYFOURBITGROUP = 24; private static final int EIGH
-
Java 中String StringBuilder 与 StringBuffer详解及用法实例
在Android/Java开发中,用来处理字符串常用的类有3种: String.StringBuilder.StringBuffer. 它们的异同点: 1) 都是 final 类, 都不允许被继承; 2) String 长度是不可变的, StringBuffer.StringBuilder 长度是可变的; 3) StringBuffer 是线程安全的, StringBuilder 不是线程安全的. String VS StringBuffer String 类型和StringBuffer的主要性
-
Java String源码分析并介绍Sting 为什么不可变
Java String源码分析 什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变. 区分对象和对象的引用 对于Java初学者, 对于String是不可变对象总是存有疑惑.看下面代码: String s =
-
JAVA String转化成java.sql.date和java.sql.time方法示例
前言 众所周知在Java中String 转 java.sql.date 是不可以直接实现的,需要先转成 java.util.date 然后再转成 java.sql.date.关于java.util.Date与java.sql.Date的区别可以点击这篇文章查看详情. 方法示例代码如下 String -> java.sql.date 输入 2016-11-11 /** * @param 返回java.sql.Date格式的 * */ public java.sql.Date strToDat
-
Java String类详解_动力节点Java学院整理
引题 在Java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合Java内存分配深度分析关于String的许多令人迷惑的问题.下面是本文将要涉及到的一些问题,如果读者对这些问题都了如指掌,则可忽略此文. 1.Java内存具体指哪块内存?这块内存区域为什么要进行划分?是如何划分的?划分之后每块区域的作用是什么?如何设置各个区域的大小? 2.String类型在执行连接操作时,效率为什么会比StringBuffer或者StringBuild
-
Java List转换成String数组几种实现方式详解
Java List转换成String数组 实现代码: List<String> list = new ArrayList<String>(); list.add("a1"); list.add("a2"); String[] toBeStored = list.toArray(new String[list.size()]); for(String s : toBeStored) { System.out.println(s); } 或 Li
-
Java Date与String的相互转换详解
Java Date与String的相互转换详解 前言: 我们在注册网站的时候,往往需要填写个人信息,如姓名,年龄,出生日期等,在页面上的出生日期的值传递到后台的时候是一个字符串,而我们存入数据库的时候确需要一个日期类型,反过来,在页面上显示的时候,需要从数据库获取出生日期,此时该类型为日期类型,然后需要将该日期类型转为字符串显示在页面上,Java的API中为我们提供了日期与字符串相互转运的类DateForamt.DateForamt是一个抽象类,所以平时使用的是它的子类SimpleDateFor
-
Java String 和StringBuffer的详解及区别
Java String 和StringBuffer的详解及区别 Java平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含 多个字符的字符数据.String类表示内容不可改变的字符串.而StringBuffer类表示内 容可以被修改的字符串. 当你知道字符数据要改变的时候你就可以使用StringBuffer.典型地,你可以使用StringBuffers来动态构造 字符数据.另外,String实现了equals方法,new String("abc"
-
Java String 和 new String()的比较与区别
Java String 和 new String()的区别 栈区存引用和基本类型,不能存对象,而堆区存对象.==是比较地址,equals()比较对象内容. String str1 = "abcd"的实现过程:首先栈区创建str引用,然后在String池(独立于栈和堆而存在,存储不可变量)中寻找其指向的内容为"abcd"的对象,如果String池中没有,则创建一个,然后str指向String池中的对象,如果有,则直接将str1指向"abcd"&qu
-
java实现字符串转String数组的方法示例
本文实例讲述了java实现字符串转String数组的方法.分享给大家供大家参考,具体如下: package Tsets; import java.util.Arrays; import java.util.List; public class String2StringList { public static List<String> stringToList(String str){ return Arrays.asList(str.split(",")); } publ
-
JAVA中StringBuffer与String的区别解析
看到这个讲解的不错,所以转一下 在java中有3个类来负责字符的操作. 1.Character 是进行单个字符操作的, 2.String 对一串字符进行操作,不可变类. 3.StringBuffer 也是对一串字符进行操作,是可变类. String: 是对象不是原始类型. 为不可变对象,一旦被创建,就不能修改它的值. 对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.String 是final类,即不能被继承. StringBuffer:
-
浅谈java中String的两种赋值方式的区别
类似普通对象,通过new创建字符串对象.String str = new String("Hello"); 内存图如下图所示,系统会先创建一个匿名对象"Hello"存入堆内存(我们暂且叫它A),然后new关键字会在堆内存中又开辟一块新的空间,然后把"Hello"存进去,并且把地址返回给栈内存中的str, 此时A对象成为了一个垃圾对象,因为它没有被任何栈中的变量指向,会被GC自动回收. 直接赋值.如String str = "Hello&
-
MySQL存储表情时报错:java.sql.SQLException: Incorrect string value:‘\xF0\x9F\x92\xA9\x0D\x0A...’的解决方法
前言 本文主要介绍了关于MySQL存储表情报错:java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\xA9\x0D\x0A...'的相关解决方法,分享出供大家参考学习,下面话不多说了,来一起看看详细的介绍: 本项目是基于Spring MVC + MySQL + Druid DataSource.在往数据库插入表情Emoji字符时报错: java.sql.SQLException: Incorrect string value:
-
java date类与string类实例代码分享
Date类用来指定日期和时间,其构造函数及常用方法如下: publicDate() 从当前时间构造日期时间对象. publicStringtoString() 转换成字符串. publiclonggetTime() 返回自新世纪以来的毫秒数,可以用于时间计算. [例3.10]测试执行循环花费的时间(数量级为毫秒),具体时间情况如图3.9所示.源程序代码如下: //程序文件名为UseDate.java import java.util.Date; public class UseDate { pu
-
Java基础教程之String深度分析
前言 String可以说是Java中使用最多最频繁.最特殊的类,因为同时也是字面常量,而字面常量包括基本类型.String类型.空类型. 一. String的使用 1. String的不可变性 /** * The {@code String} class represents character strings. All * string literals in Java programs, such as {@code "abc"}, are * implemented as ins
-
Java中char[] 和 String 类型占用字节大小问题
作者:威威喵 原文链接:https://blog.csdn.net/smile_Running/article/details/87211916 在 C 语言中 1.char a[10] = {"China"} 中,这个 a 占用多少字节? 答:占用 10 个字节. 解析:上面代码对 a 做了赋值的操作, a[0]='C' ,a[1]='h' ,a[2]='i' ,a[3]='n' ,a[4]='a' ,a[5]='\0',a[6]='\0',a[7]='\0',a[8]='\0',a
随机推荐
- 64位CentOs7源码安装mysql-5.6.35过程分享
- 改进版通过Json对象实现深复制的方法
- 前端框架Vue.js构建大型应用浅析
- IOS Cache设计详细介绍及简单示例
- IOS手势操作(拖动、捏合、旋转、点按、长按、轻扫、自定义)
- cocos creator Touch事件应用(触控选择多个子节点的实例)
- php更新mysql后获取影响的行数发生异常解决方法
- asp get和post数据接收过滤
- VS中C#读取app.config数据库配置字符串的三种方法
- node+vue实现用户注册和头像上传的实例代码
- Linux 无法使用userdel 删除用户和组的解决方案
- Java UrlRewriter伪静态技术运用深入分析
- php文件上传类完整实例
- javaweb学习总结——使用JDBC处理MySQL大数据
- TypeScript入门-接口
- android实现微信联合登录开发示例
- 详解C++编程中的嵌套类的声明与其中的函数使用
- 基于PHP读取csv文件内容的详解
- JS扩展String.prototype.format字符串拼接的功能
- Nginx 日志改成 JSON 格式的方法