java String 类的一些理解 关于==、equals、null
1、String 的==与equal()
在对字符串的相等判断,==判断的是地址是否相同,equal()判断的是字符值是否相同。大多数时候==跟equal()的结果都是相同的。这是因为String对象是不变模式的,如果你不是明确地new一个String对象,Java对于String对象的保存默认的是会把新生成的String 对象放到一个缓冲区,然后每次判断缓冲区中是否已经有了这个对象,如果有了,那么后建立的同样字符值的String对象也会指向最初建立是该字符值对象的地址。也就是说字符值相同的时候,大多数情况下地质也是相同的。==与equal()效果是相同的。但是当对象是str = new String(“abc”)生成的而不是直接str = “abc”这样赋值生成,或者经过了一些字符串连接处理,或者通过StringBuffer等对象生成,都会在内存中开辟新的地址的,这个时候==和 equal()结果是不同的。
是不是稍微有些复杂?这里需要一些关于内存,堆栈,对象保存方面的理解。我不想纠缠于这个问题的讨论。如果不能理解,那么只要记住如果你想要判断两个字符串的字符值是否相等,没有别的要求的时候,那么请使用equal()而不是==,至于什么时候需要使用==,我想当你需要的时候,你自然就会明白了。实际上,对于字符串的判断,我们很少需要用==的。
2、关于str.equal(“abc”)和”abc”.equal(str)
这个好像争论也挺多的,第一种常量写在后面可能符合大多数人的习惯,也符合我们的逻辑思维。但是需要多一个str是否为null的判断。否则这里是有可能出现异常的。而后一种写法不需要多做关于是否为null这个判断。就我个人喜好来说,比较喜欢后一种写法。
3、关于String的null
/**
* 测试java的String为null 的情况
* create date:2009-6-3
* author:Administrator
*
*/
public static void testNull(){
String a= null,b = null,c="呵呵";
System.out.println(a == null);
System.out.println(a+b+c);
}
方法运行结果:
true
nullnull呵呵
所以大家要注意了做字符串合并操作时,别忘记判断null,否则结果会不太让你爽啊!
相关推荐
-
Java中String判断值为null或空及地址是否相等的问题
String的null或空值的判断处理 笔者在开发过程中,常常碰到过下面这些错误的用法: 1,错误用法一: if (name == "") { //do something } 2,错误用法二: if (name.equals("")) { //do something } 3,错误用法三: if (!name.equals("")) { //do something } 我们来解说一下: 上述错误用法1是初学者最容易犯,也最不容易被发现的错误,
-
Java String转换时为null的解决方法
开发中经常遇到从集合类List.Map中取出数据转换为String的问题,这里如果处理不好,经常会遇到空指针异常java.lang.NullPointerException,在此总结一下常用转换为String的方法,以及转换后如何对其进行判null使用的问题. Java中对象转换为String的常用方法: 方法一:String objStr = (String) obj: 强制类型转换,对象obj为null,结果也为null,但是obj必须保证其本质是String类型的值,即可转换的值.
-
Java String类字符串的理解与认知
目录 一.前言 二.String类概述 三.字符串的特点 四.String 构造方法 图示: 代码演示: 五.String类对象的特点 六.比较字符串的方法 用法: 代码图示: 七.判断两个字符串地址是否相等 StringBuilder和StringBuffer的区别 一.前言 在java中,和C语言一样,也有关于字符串的定义,并且有他自己特有的功能,下面我们 一起来学习一下. 二.String类概述 string在软件包java.lang下,所以不需要导包. String字符串是java中的重
-
java String类常量池分析及"equals"和"==”区别详细介绍
java "equals"和"=="异同 首先简单说一下"equal"和"==" ==操作对于基本数据类型比较的是两个变量的值是否相等, 对于引用型变量表示的是两个变量在堆中存储的地址是否相同, 即栈中的内容是否相同 equals操作表示的两个变量是否是对同一个对象的引用, 即堆中的内容是否相同. 综上,==比较的是2个对象的地址,而equals比较的是2个对象的内容. 再简单介绍一下String类 String类 又称作不可
-
java String类常量池分析及"equals"和"==”区别详细介绍
java "equals"和"=="异同 首先简单说一下"equal"和"==" ==操作对于基本数据类型比较的是两个变量的值是否相等, 对于引用型变量表示的是两个变量在堆中存储的地址是否相同, 即栈中的内容是否相同 equals操作表示的两个变量是否是对同一个对象的引用, 即堆中的内容是否相同. 综上,==比较的是2个对象的地址,而equals比较的是2个对象的内容. 再简单介绍一下String类 String类 又称作不可
-
java String 类的一些理解 关于==、equals、null
1.String 的==与equal() 在对字符串的相等判断,==判断的是地址是否相同,equal()判断的是字符值是否相同.大多数时候==跟equal()的结果都是相同的.这是因为String对象是不变模式的,如果你不是明确地new一个String对象,Java对于String对象的保存默认的是会把新生成的String 对象放到一个缓冲区,然后每次判断缓冲区中是否已经有了这个对象,如果有了,那么后建立的同样字符值的String对象也会指向最初建立是该字符值对象的地址.也就是说字符值相同的时候
-
Java String类的理解及字符串常量池介绍
目录 一. String类简介 1. 介绍 2. 字符串构造 二. 字符串常量池(StringTable) 1. 思考? 2. 介绍和分析 3. intern方法 三. 面试题:String类中两种对象实例化的区别 四. 字符串的不可变性 一. String类简介 1. 介绍 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. Java的String类在lang包里,java.lang.String是java字符串类,包含
-
Java String类的性质与比较
目录 1.什么是String? 2.String类的构造方法 3.String类的性质 4.String之间的相互比较 1.什么是String? 首先,初学者一定要知道String是一个类,它是字符串类型,但它不属于基本数据类. 所谓字符串类型,意思就好比将字符(也就是char类型)像烤串一样串起来,列如' a '和' b '拼接起来变成"ab"(注意字符串使用双引号).' a '和' b'是字符类型也就是char类型,而" ab"则是一个字符串类型.ps:字符串可
-
带你一文深入认识Java String类
目录 前言 一.认识String 1.JDK中的String 2.创建字符串的四种方式 3.字符串的字面量 4.字符串比较相等 二.字符串的常量池 1.什么是字符串常量池 2.手工入池方法 三.字符串的不可变性 1.为什么不可变 2.如何修改字符串内容 3.StringBuilder类的具体使用 前言 String 类在Java中是很常用的类,很重要的类,在后续的学习中经常会用到,是后续学习的基础 一.认识String 1.JDK中的String 首先我们看看JDK中的String类源码,它实现
-
Java String类简单用法实战示例【字符串输出、比较】
本文实例讲述了Java String类简单用法.分享给大家供大家参考,具体如下: 一 String类的实例化方式 1 代码 public class NewString { public static void main(String args[]) { String str1= "Hello World!"; // 直接赋值建立对象str1 System.out.println("str1:" + str1) ; //输出 String str2 = new St
-
java String类功能、原理与应用案例【统计、判断、转换等】
本文实例讲述了java String类功能.原理与应用.分享给大家供大家参考,具体如下: String构造方法 package cn.itcast_01; /* * 字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. * 通过查看API,我们可以知道 * A:字符串字面值"abc"也可以看成是一个字符串对象. * B:字符串是常量,一旦被赋值,就不能被改变. * * 构造方法: * public String():空构造 * public String(byte[] by
-
Java TreeSet类的简单理解和使用
这篇文章主要介绍了Java TreeSet类的简单理解和使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 TreeSet类是Set接口的一个实现类,主要作用是用于对对象的排序以及确定存入对象的唯一性.给对象排序的方式有很多,比如一些基本类型int.String等类型就已经提供了很多排序的方法了,但是这并不说明TreeSet类就没有什么用了.在一些时候我们需要自定义一些类,同时需要对这个类的对象进行排序,那么这个时候我们就可以通过这个TreeS
随机推荐
- UTF-8 编码中BOM的检测与删除
- Mysql数据库锁定机制详细介绍
- iOS点击推送消息跳到应用指定页面方法
- 在.Net中使用MongoDB的方法教程
- php字符串函数学习之substr()
- hammer.js实现图片手势放大效果
- JavaScript模拟下拉菜单代码
- Linux使用Node.js建立访问静态网页的服务实例详解
- C语言实现Linux下的socket文件传输实例
- 仿中关村在线首页弹出式广告插件(jQuery版)
- 左右两侧的广告代码 简单
- JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
- Android自定义View圆形进度条控件(三)
- 探讨Java中最常见的十道面试题(超经典)
- winfrom 在业务层实现事务控制的小例子
- mac安装scrapy并创建项目的实例讲解
- 详解Android app自动更新总结(已适配9.0)
- IntelliJ IDEA编辑器配置vue高亮显示
- asp.net core 腾讯验证码的接入示例代码
- nginx解决跨域问题的实例方法