In Java, the String will have different usage.
Example:
public class Test {
public static void main(String[] args) {
String s1 = "accp";
String s2 = "accp";
String s3 = new String(s1); if(s1 == s2) {
System.out.print("true, ");
} else {
System.out.print("false,");
} if(s1 == s3) {
System.out.println("true");
} else {
System.out.println("false");
}
}
} /* Output:
true, false
*/
对于语句String s1 = "accp";
Java内部将此语句转化为以下几个步骤:
- 先定义一个名为s1的对String类的对象引用变量: String s1;
- 在栈中查找有没有存放值为"accp"的地址。
如果没有,则开辟一个存放字面值为"accp"的地址,接着创建一个新的String类的对象o,并将o 的字符串值指向这个地址,而且在栈中这个地址旁边记下这个引用的对象o。
如果已经有了值为"accp"的地址,则查找对象o,并返回o的地址。
所以当栈中存在你想创建的变量的值的时候,其实是引用已经存在栈中的地址,不是新建的。 - 将s1指向对象o的地址。
String s1 = "accp";其字符串值是保存了一个指向存在栈中数据的引用!所以s1和s2的引用地址是相同的,所s1==s2为true。
而String s3 = new String(s1);是创建一个对象,也就是创建了新的引用,所以s3的引用地址是新创建的,当然和s1的引用地址不同。所以s1 == s3为false。
==是比较对象的引用地址,如果要比较对象的值的话用equal吧!
Java null String的更多相关文章
-
JAVA中String = null 与 String = ";"; 的区别
JAVA中String = null 与 String = ""的区别 笔者今天在Debug的时候发现的NPE(NullPointerException),辛辛苦苦地调试了半天,终 ...
-
Java中string 创建对象时 “”和null的差别
null和""的差别 问题一: null和""的差别 String s=null; string.trim()就会抛出为空的exception String s ...
-
java 创建string对象机制 字符串缓冲池 字符串拼接机制
对于创建String对象的机制,在这一过程中涉及的东西还是值得探究一番的. 首先看通过new String对象和直接赋值的方式有什么区别,看如下代码: public static void main( ...
-
java中String的相等比较
首先贴出测试用例: package test; import org.junit.Test; /** * Created by Administrator on 2015/9/16. * */ pub ...
-
Android java传递string类型数据给C
本文接着实现<Android java传递int类型数据给C>的还未实现的方法: public native String sayHelloInC(String s); 先贴一个工具方法, ...
-
Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property &#39;xxx&#39;: no matching editors or conversion strategy found
今天在完成项目的时候遇到了下面的异常信息: 04-Aug-2014 15:49:27.894 SEVERE [http-apr-8080-exec-5] org.apache.catalina.cor ...
-
android- FileProvider崩溃 - NPE试图调用一个空字符串XmlResourceParser(FileProvider crash - npe attempting to invoke XmlResourceParser on a null String)
问题: This is a part of my manifest: <?xml version="1.0" encoding="utf-8"?> ...
-
MyBatis3: There is no getter for property named &#39;code&#39; in &#39;class java.lang.String&#39;
mybatis3 : mysql文如下,传入参数为string类型时‘preCode’,运行报错为:There is no getter for property named 'preCode' i ...
-
mybatis There is no getter for property named &#39;xx&#39; in &#39;class java.lang.String
转载自://http://www.cnblogs.com/anee/p/3324140.html 用mybatis查询时,传入一个字符串传参数,且进行判断时,会报 There is no getter ...
随机推荐
-
2014.1.23 Discuz论坛迁移+VPS配置手记
虽说这也不是我第一次转移这个论坛了,但毕竟还是第一次自己配置VPS,写点东西记一下 一:关于VPS的配置 1.用TeamViewer连接服务器 这个VPS的IDC自己带有一个远程控制的页面,用浏览器打 ...
-
Linux下pdf阅读器推荐
由于需要在pdf文件上做标记,所以自带的文档查看器根本满足了需求,之前去网上查了查,Okular评价挺高,就安装了一个,确实能基本满足我的需求,但是 1.界面感觉还是不太友好,书签栏一直在那. 2.而 ...
-
《苹果开发之Cocoa编程》挑战1 创建委托 练习
<苹果开发之Cocoa编程>第4版 P87 新建一个单窗口应用程序,设置某对象为窗口的委托,当用户调整窗口尺寸时,确保窗口高度为宽度的2倍. 需要实现的委托方法为:-(NSSize)win ...
-
字符串分割函数 STRTOK &; STRTOK_R (转)
1.一个应用实例 网络上一个比较经典的例子是将字符串切分,存入结构体中.如,现有结构体 typedef struct person{ char name[25]; char sex[1 ...
-
strrchr函数
C语言函数 函数简介 函数名称: strrchr 函数原型:char *strrchr(char *str, char c); 所属库: string.h 函数功能:查找一个字符c在另一个字符串str ...
-
@+id/和android:id的区别
android:id="@+id/btn",表示在R.java文件里面新增一个id为btn的控件索引,最常用的一种声明控件id的方式.android:id="@andro ...
-
JS对象与json字符串格式
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...
-
使用Prism提供的类实现WPF MVVM点餐Demo
使用Prism提供的类实现WPF MVVM点餐Demo 由于公司开发的技术需求,近期在学习MVVM模式开发WPF应用程序.进过一段时间的学习,感受到:学习MVVM模式,最好的方法就是用MVVM做几个D ...
-
MySQL Sending data导致查询很慢的问题详细分析【转载】
转自http://blog.csdn.net/yunhua_lee/article/details/8573621 [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据的时 ...
-
三、xadmin----内置插件
1.Action Xadmin 默认启用了批量删除的事件,代码见xadmin-->plugins-->action.py DeleteSelectedAction 如果要为list列表添 ...