-
2019-01-04 17:46:13
假如有数组a:Array[String] =Array[String] ("a","b","c")
直接打印print(a)就是一堆无意义的地址。
要打印数组内容。要用mkString
println(a.mkString(" & ")) //中间的连接符号可以自己选。不填的话默认直接相连。
更多相关内容 -
Java打印String对象的地址
2022-04-15 18:07:20当使用System.out.println()方法打印String类型对象时,会输出String对象代表的字符串,并不会输出对象的地址。因此,我们必须借助其他API来实现该功能。 java.lang.System类的方法 public static native int ...一、System函数
当使用
System.out.println()
方法打印String类型对象时,会输出String对象代表的字符串,并不会输出对象的地址。因此,我们必须借助其他API来实现该功能。java.lang.System类的方法
public static native int identityHashCode(Object x);
Returns the same hash code for the given object as would be returned by the default method hashCode(), whether or not the given object’s class overrides hashCode(). The hash code for the null reference is zero.
Params: x – object for which the hashCode is to be calculated
Returns: the hashCode无论给定对象的类是否覆盖hashCode(),返回给定对象的哈希码与默认hashCode()方法返回的哈希码相同。空引用的哈希码是零。默认hashCode()方法,即Object对象中的hashCode()方法
public native int hashCode();
As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer)在合理可行的情况下,由 Object 类定义的 hashCode() 方法为不同的对象返回不同的整数。 (通常将对象的内部地址转换为整数),也就是说Object类的hashcode()方法返回对象的地址。
二、实现代码
一般,被打印的对象的形式为:java.lang.Object@1ff9dc36,由全限定类名+@+十六进制数组成。
为了打印的字符串对象的形式和一般形式相同,我们还需要使用另外两个方法,
String.class.getName()
返回全限定类名java.lang.String;
Integer.toHexString(int)
将十进制数转换为十六进制数并返回;代码如下及运行结果:
参考代码:public class StringObjectAddrTest { public static void main(String[] args) { String str = "HelloWorld"; System.out.println(String.class.getName() + "@" + Integer.toHexString(System.identityHashCode(str))); // 与Object对比 System.out.println(new Object()); } }
-
Java中String判断值为null或空及地址是否相等的问题
2020-09-02 20:56:12主要介绍了Java中String判断值为null或空及地址是否相等的问题,文中举了简单的例子对字符串类型的值和地址问题进行讲解,需要的朋友可以参考下 -
关于java中String的地址和值的问题
2017-03-29 10:45:55来源: ... class Test1 { public static void main(String[] args) { String a = "abc";// 问题1,是不是在堆内存的常量池里放了“abc”然后在栈内存里放了a,a中存的是常量池里abc的地址? St来源:
https://zhidao.baidu.com/question/1732129720808645067.html
class Test1 { public static void main(String[] args) { String a = "abc";// 问题1,是不是在堆内存的常量池里放了“abc”然后在栈内存里放了a,a中存的是常量池里abc的地址? String b = new String("abc"); tt tt1 = new tt(); System.out.println(tt1);// 问题2,这个地方打出来的是什么东西,是地址吗? System.out.println(a);// 问题3,这个地方打出来的为什么是a的值得,而不是问题2那样的东西? System.out.println(b);// 问题4,既然是对象,为什么也会打出来值?而不是问题2那样的东西。 System.out.println(a.hashCode());// 可选题,hashCode不是打印地址吗?(该题值20分) System.out.println(b.hashCode()); System.out.println(a == b);// 问题5,这里比的是地址吗? } } class tt { }
System.out.pringln(Object); 首先它打印的是Object的toString()方法的返回值。问题1, 如你所说的那样。问题2,打印出来 什么 那要看你tt的toString() 方法是怎么实现的,如果没有toString()方法,那tt会默认继承Object的toString()方法,而Object的toString()方法的实现就是返回对象的地址值。问题4,同问题3.a.hashCode()返回的是哈希值(一个int类型的数),System.out.println(int类型)的时候打印的也是int值本身问题5,比较的是地址值。
总结: 打印出来什么是看对象类有没有实现toString()方法,如果没有那就打印对象的地址值,如果对象类重写了toString()方法,那就要看方法是怎么实现的了。
-
为什么打印String对象,不是地址值?
2017-07-18 19:14:47首先看一下API中String类的toString()方法: toString public String toString() 返回此对象本身(它已经是一个字符串!)。 指定者:接口 CharSequence 中的 toString覆盖:类 Object 中的 toString 返回:字符...我们知道当打印对象的引用时,会默认调用Object类的toString()方法,返回的是一个字符串表示,该字符串的形式为类名+@+十六进制的哈希值;为什么String打印的不是这样一个地址值呢?因为String类继承自Object类,重写了从Object类拿到的toString()方法,返回的是该该对象本身,即字符串。详见下面API中Object的toString()方法和String类的toString()方法:
API中Object类的toString()方法:
public String toString()
-
返回该对象的字符串表示。通常,
toString
方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。 -
Object
类的toString
方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@
”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:getClass().getName() + '@' + Integer.toHexString(hashCode())
-
-
返回:
- 该对象的字符串表示形式。
API中String类的toString()方法:
toString
public String toString()
- 返回此对象本身(它已经是一个字符串!)。
-
-
指定者:
-
接口
CharSequence
中的toString
覆盖:
-
类
Object
中的toString
-
接口
-
-
返回:
字符串本身。
Object类的equals()方法,默认是比较对象的地址值,一般使用时会重写该方法,用来比较对象的属性值。
String类继承Object类的equals()方法,并重写了该方法,比较的是字符串的内容。详见API:
public boolean equals(Object anObject)
-
将此字符串与指定的对象比较。当且仅当该参数不为
null
,并且是与此对象表示相同字符序列的String
对象时,结果才为true
。 -
-
参数:
-
anObject
- 与此String
进行比较的对象。
返回:
-
如果给定对象表示的
String
与此String
相等,则返回true
;否则返回false
。
另请参见:
-
compareTo(String)
,equalsIgnoreCase(String)
-
-
-
-
-
-
返回该对象的字符串表示。通常,
-
小白求助:打印输出String类型输出不输出地址值
2018-10-09 02:46:52打印输出会调用Object.toString,String重写toString()返回值时:return this 但是这不还是一个地址值吗? 那为什么输出的是一个字符串呢而不是地址呢? 忘大神能够指点,先行谢过啦 -
打印String对象为什么输出的不是地址啊
2017-07-22 15:22:17String s = new String("abc"); System.out.println(s); 这输出是s的内容,这明明是对象的引用啊,是地址啊 如果这样 Student student =new Student(); System.out.println(student);却打印地址 -
Java中String内存地址的问题(为什么String 的变量输出不是地址)
2020-06-03 10:18:01然而我们的String类里重写了toString(),它返回的是String自己,String是什么呢,String其实就是字符数组(),它内部封装了一个字符数组,所以打印字符串就是打印字符数组,而不是地址 关于Java中String内存地址的... -
String是值传递还是引用传递
2018-06-28 09:53:30String是值传递还是引用传递 今天上班时,同事发现了一个比较有意思的问题。他把一个String类型的参数传入方法,并在方法内改变了引用的值。 然后他在方法外使用这个值,发现这个String还是之前的值,并没有改变。 ... -
一文带你搞清String是值传递还是引用传递?
2020-07-31 14:21:06最近看到一道关于String的面试题,差点让我以为String是值传递,就是下面这个例子,体验下: public class Demo{ public static void main(String[] args) { Demo d = new Demo(); String str = "BEA"; d.... -
java 中String到底是值传递还是引用传递的问题
2020-12-20 11:48:20最近看到一道关于string的面试题,差点让我以为string是值传递,就是下面这个例子,体验下: 1 2 3 4 5 6 7 8 9 10 11 12 public class ... -
关于C语言打印string类字符串的问题
2019-05-02 10:42:00首先因为printf函数输出字符串是针对char *的,即printf只能输出c语言的内置数据,而string不是c语言...因此该怎么打印string字符串呢? 1、利用string的成员函数c_str()打印,如下: string q = "123ABCD"; p... -
打印对象和toString方法
2021-03-15 16:19:43JAVA对象java对象是都是Object类的实例,都可直接调用... 6.2.1打印对象和toString方法先看下面程序:程序清单:codes/06/6-2/PrintObjectjavapublic classPrintObject{public static voidmain(String args[]){Person... -
Java String 到底是引用传递还是值传递?
2019-10-24 22:46:20而对于对象类型,java 参数传递的是对象的引用,相当于对象在堆里面的内存地址。 我们分析下一下代码: public class StringTransactTest { public static void main(String[] args) { Stri... -
Java中打印对象内存地址
2021-10-03 17:24:36java是获取不到对象的地址的,但是你可以获取hashcode,对象的hashcode在某种意义上就相当于对象的地址了,hashCode是用来在散列存储结构中确定对象的存储地址的。 既然Java中对象内存地址不能获取到,所以这篇... -
通过反射改变String类的值
2018-07-26 10:10:08为什么String被设计成不可变 很多人挺感兴趣的,那么设计成不可变是不是就真的不可修改值呢,各位看官往下看。 通常认为String类对象是不可修改的,例如: String s="abc"; s="123"; ... -
向 ArrayList 中添加了几个对象,直接打印列表后结果是对象地址呢?如何显示内容?
2020-12-02 16:40:17问题: ArrayList 中添加对象,打印出来是地址值,无法显示正常可读内容。 解决办法: 重写 toString 方法,迭代 for循环遍历 实例 : 1. 创建一个List,在List 中增加三个工人,基本信息如下表: 2. 在li4 ... -
【Java】哈希值相同的变量/对象的地址值也相同吗?
2019-08-21 19:49:44“Java中直接打印对象,输出的是对象的地址值(对象的类没有重写toString方法)”,这是初学者在学Java基础语言的时候,大多数教程都是这么介绍的,初学者也会认为这就是对象在内存中存储的位置,如输出的地址值... -
python获取内存地址上存储的值
2019-10-04 02:34:59但是反过来,怎么获取内存地址上存储的值? 先看一段代码: from ctypes import string_at from sys import getsizeof from binascii import hexlify a = 2333 print(hexlify(string_at(id(a),g... -
关于System.out.println(str)打印的是字符串值,而不是地址的问题
2020-04-15 00:29:59A:在我们没有学习Object类的toString方法前,我们打印引用类型对象名,打印出来的是地址值,那么String作为引用类型,打印的应该也是地址值呀.为什么它打印出来的就是字符串本身的值呢. 代码举例: String str = "abc";... -
java中为什么打印char数组输出是值,而其他是地址值
2017-06-07 10:38:53首先println方法对数组的处理是先转化为String类型,我们可以进入println源码看一下,我是创建了一个String数组进去看了下 public void println(Object x) { String s = String.valueOf(x); synchronized (this) {... -
【c++】c++中如何打印字符串的地址
2015-10-30 16:00:43在C++中,如果cout一个字符数组的话,那么它会沿着这个地址,一直输出这个字符串,直到遇到'\0',例如: char*c="cadn\0hello"; cout 输出的结果是:cadn 如果我们自作聪明的想输出第一个字符的地址,例如这样... -
对String值不可变的理解以及String类型的引用传递问题
2016-09-08 20:01:08今天复习java时,突然注意到了一句以前没有注意过的一句话,String 是final修饰的,其值是不可变的。当时看的一脸懵逼,String str = "abc"; str = "abcde"这两行代码没有任何的错误的。上网百度了许久,还是整理... -
String详解
2020-10-24 09:11:47这篇博客主要介绍了String字符串,包括在内存中的存储原理和常用的方法。 -
基于JDK1.8的String详解
2019-05-16 20:09:43String 类的定义 public final class String implements java.io.Serializable, Comparable<String>, CharSequence {} 这是一个用 final 声明的常量类,不能被任何类所继承,而且一旦一个String对象被创建, ... -
C++中的string类用法简介
2019-08-21 17:21:17本文主要介绍C++中的string类的常见用法。 1. 概述 string是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行string操作。同时,C++的算法库...