string-java 中 String 类连接问题

问题描述

java 中 String 类连接问题
    String str1 = "aa" ;
    String str2 = "bb" ;
    String str3 = "aa" + "bb" ;
    String str4 = str1 + str2 ;
    boolean b =(str3 == str4);
    System.out.println(b);

    这里b为什么是false , 有那个大侠能否帮忙回答下?

解决方案

编译的时候,aa,bb,会存在常量池里面,同时常量的运算结果也会放在常量池里面,如aa+bb就会在常量池里面存一个aabb,而str1+str2的运算不会变成常量池里引用。如图所示,也可以自己使用javap -verbose 命令查看

解决方案二:

(str3 == str4)比的是放置该字符串的地址,所以不一样。
要用equals

解决方案三:

str1和str2都是指向常量池中的对象,换句话说就是“aa”,"bb"在栈内存中存在的,str3是是两个常量之和,它会在栈中创建一个对象"aabb",然后将str3的引用指向它,这也就是说str3引用的对象也是在栈内存中存在的!而str1 + str2虽然内容也是“aabb”,但是它将在堆里面生成一个"aabb"对象,并返回这个对象,所以str3是在栈内存中,str4是在堆内存中

解决方案四:

Java中String类型不能使用双等号比较是否相等,要使用String.Equals

解决方案五:

Java的String类的内存分配问题
Java中String问题
java中String问题

解决方案六:

字符串使用equals,因为==比较的是内存地址,

解决方案七:

比较两个对象值是否相等要用equals(),==比较的是对象的内存地址

解决方案八:

(str3 == str4)比的是放置该字符串的地址,返回false。
要用equals

解决方案九:

lplj717 正解。

关于java中 == 和 equals 的区别:http://blog.csdn.net/zhaizu/article/details/38556241

解决方案十:

String str1 = "aa" ;
String str2 = "bb" ;
String str3 = "aa" + "bb" ; //在内存中分配一个地址
String str4 = str1 + str2 ; //在内存中又分配一个地址
boolean b =(str3 == str4); // ==是判断两个变量的在内存中的地址是否一样,很显然不一样,返回false,如果想判断两个变量在内存中地址指向的值是否相等,可以使用equals
System.out.println(b);

时间: 2024-11-08 20:26:05

string-java 中 String 类连接问题的相关文章

java中 String类常量池

java中 String类常量池 String常量池详解: 1.String使用private final char value[]来实现字符串的存储,也就是说String对象创建之后,就不能再修改此对象中存储的字符串内容,就是因为如此,才说String类型是不可变的(immutable).String类有一个特殊的创建方法,就是使用""双引号来创建.例如new String("i am")实际创建了2个 String对象,一个是"i am"通过

java中string类转成timestamp类

问题描述 java中string类转成timestamp类 java中string类转化成timestamp时,调用了timestamp的valueof()方法,但是转换后是还有小数点的,想去掉小数点,但还是timestamp类型,该如何做呢?说明下,string是存放类似日期格式的字符串.谢谢各位大神的指导,在下感激不尽. 解决方案 timestamp本身就是带毫秒的.如果要输出用,还是的格式化成string输出.如果数据库要存储用,可以转成date后,用date.gettime()获取lon

区分java中String+String和String+char_java

我们来考虑一个关于java中String的问题: "abc" + '/'和 "abc" + "/"的区别. 通过这个例子, 我们可以顺便练习一下JDK工具中javap的用法, 原问题是这样的: 把斜杠/当作字符或字符串有什么区别呢? 一个是当作基本数据类型char,一个是对象String.具体有什么区别呢? 当作字符效率会更高吗?String str = "abc" + '/';和String str = "abc&

字符串-java中String究竟是传递的值,还是引用

问题描述 java中String究竟是传递的值,还是引用 很多人说,java中的String虽然是对象,但是具有值类型的特征.他是值传递,传递的值. 我认为这这种说法完全是错误的. String和普通对象毫无区别,和其他对象一样,传递的是引用,而不是值. 一段String的运用代码: String a = "123"; public void change(String a){ a = "234"; } 很多人会说,a的值没有变,是因为String是值传递,问题是,

深入剖析java中String、StringBuffer、StringBuilder的区别_java

java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1. 可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有"final"修饰符,所以可以知道string对象是不可变的. private final char value[]; StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在

java中string 类型的对象间比较的学习笔记

在JAVA 中String 有两种不同的赋值方式 ,"="和new一个新的对象,虽然在输出时显示的内容是一样的,但数据存储的原理是不同的. String a="ab"; String b="ab"; System.out.println(a==b);//true 三句话的执行时这样的:        当把"ab"赋值给a变量时,因为是用"="直接赋值,此时"ab"作为字面量存在栈中,然后

从内存方面解释Java中String与StringBuilder的性能差异_java

以前经常在网上看到关于Java字符串拼接等方面的讨论.看到有些Java开发人员在给新手程序员的建议中类似如下写道: 不要使用+号拼接字符串,要使用StringBuffer或StringBuilder的append()方法来拼接字符串. 不过,用+号拼接字符串就真的那么令人讨厌,难道使用+号拼接字符串就没有一点可取之处吗? 通过查阅Java API文档中关于String类的部分内容,我们可以看到如下片段: "Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串

Java中String、StringBuffer、StringBuilder的区别介绍_java

java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有"final"修饰符,所以可以知道string对象是不可变的. private final char value[]; StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在A

Java中String、StringBuffer、StringBuilder的区别详解_java

 java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有"final"修饰符,所以可以知道string对象是不可变的. private final char value[]; StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在

java中String类型变量的赋值问题介绍_基础知识

运行下面这段代码,其结果是什么? package com.test; public class Example { String str = new String("good"); char[] ch = { 'a', 'b', 'c' }; public static void main(String[] args) { Example ex = new Example(); ex.change(ex.str, ex.ch); System.out.println(ex.str);