java s.intern函数问题?

作者&投稿:诏柳 (若有异议请与网页底部的电邮联系)
Java 关于intern方法的问题~

不妨看下面这段代码、 String str1 = "Hello";
String str2 = new String("Hello");
System.out.println(str1==str2.intern()); System.out.println(str2==str2.intern());控制台输出"true"与"false" 第一个"true"就解释了第一个疑问、intern把str2的内存指向为str1、所以二者相等、字符串池中应该有两个"Hello",一个是str1的引用,另外一个则是str2用new出来的空间,但使用intern后其实已经指向str1的内存空间了,所以才会输出"false"再说点题外话,Stirng str2 = new Stirng("Hello");其实应该有两个对象,一个是存在于栈中的"Hello",另外一个是对变量"str2"的指向,存在于堆内存中。用new关键字不管池中有没有都会开辟一块内存空间。

可以利用Scanner类实现从键盘读入数据,然后利用println打印。
输入以下代码:
import java.util.*;
public class woo {
public static void main(String args[])
{
Scanner in=new Scanner(System.in); //使用Scanner类定义对
System.out.println("please input a integer number
请输入一个整数");
int a=in.nextInt(); //接收整形数据
System.out.println(a);
System.out.println("please input a float number
请输入一个浮点数");
float b=in.nextFloat(); //接收float型数据
System.out.println(b);
}
}

执行代码并提示进行:

得到结果:

扩展资料:
Java语言中的IO包支持Java的基本I/O(输入/输出)系统,包括文件的输入/输出。Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。
任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。
控制台的输入、输出是由System.in和System.out来完成的。目前,读取控制台的输入输出的首选方法的是字符流,但完成控制台输入的唯一方法是字节流,因而java提供了InputStreamReader和OutputStreamWriter将字节流转化成字符流。
BufferedReader是缓冲输入字符流。正如我们在例子中看到的,java允许使用System.out向控制台写数据,但在实际的项目中,它推荐使用PrintWriter,它是基于字符的。
参考资料:
百度百科——Scanner

intern() 方法返回字符串对象的规范化表示形式。

它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。

语法

public String intern()

参数

  • 返回值

    一个字符串,内容与此字符串相同,但一定取自具有唯一字符串的池。

    实例

  • public class Test {

  •    public static void main(String args[]) {

  •        String Str1 = new String("www.runoob.com");

  •        String Str2 = new String("WWW.RUNOOB.COM");


  •        System.out.print("规范表示:" );

  •        System.out.println(Str1.intern());


  •        System.out.print("规范表示:" );

  •        System.out.println(Str2.intern());    }}



可能是由于你本地和问w3cschool使用的jdk版本不同造成的,在不同的jdk版本里,intern()和new String对应的内存位置也不同。再具体我也说不上来,反正就是这样的。

你好,不好意思,我的学习不是太好,你发的这个我有点看不太懂,不能为您解答。

/**
* @author dxc
* @date 2018/11/4
*/
public class StringInternTest {
public static void main(String[] args) {
String s = new String("1");
s.intern();
String s2 = "1";
System.out.println(s == s2);

String s3 = new String("1") + new String("1");
//String s3 = "1" + "1";
s3.intern();
String s4 = "11";
System.out.println(s3 == s4);
System.out.println(s3.equals(s4));
}
}


长寿区17760677410: java String 中 intern方法的概念是? -
艾泳氟他: public String intern()返回字符串对象的规范化表示形式. 一个初始为空的字符串池,它由类 String 私有地维护.当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串...

长寿区17760677410: 想请教java高手们一个关于intern方法的问题,不甚感激
艾泳氟他: 不妨看下面这段代码、String str1 = "Hello"; String str2 = new String("Hello"); System.out.println(str1==str2.intern());System.out.println(str2==str2.intern()); 控制台输出"true"与"false" 第一个"true"就解释了第一个疑问、intern把str...

长寿区17760677410: 下面的java代码在运行时总共创建了()个对象 -
艾泳氟他: 我来终结这个问题吧: 1.一共只有三个对象 2.new Demo().makeObject()一个 3.String s1,s2="abc";只有【一个】,等会解释 4.Demo demo2=new Demo();一个解释: String s1,s2="abc";这里是创建一个【常量池】对象和两个个...

长寿区17760677410: java 字符串问题 -
艾泳氟他: 注意==比较的是两个变量的存储地址.equals比较的才是内容"hel"+"lo"等价于"hello",而s=="hello";系统会优先在字符常量池中查找是否存在"hello"字符串,故会和s指向同一地址.而s1+s2,系统先给新产生的字符串分配一个新的地址,所以和s地址不同.结果为false.若要先根据字符串的内容查找地址,则写成s==(s1+s2).intern();结果为true.当然改成s.equals(s1=s2);结果也是true.

长寿区17760677410: String问题,intern()
艾泳氟他: 你的描述很正确,jdk中是这样说的,现在你的疑问是new的那个String会怎么样了是吧.你也说了,他在堆中是吧.String s2 = new String("Monday")以它为例说一个问题.这儿除了在堆中创建String对象外,他还在栈中保存s2变量,s2就是...

长寿区17760677410: 问几个关于java的Integer问题. -
艾泳氟他: lowestOneBit(int i)返回具有至多单个 1 位的 int 值,在指定的 int 值中最低位(最右边)的 1 位的位置 highestOneBit(int i)返回具有至多单个 1 位的 int 值,在指定的 int 值中最高位(最左边)的 1 位的位置.numberOfLeadingZeros(int i)在指定 int 值的二进制补码表示形式中最高位(最左边)的 1 位之前,返回零位的数量.numberOfTrailingZeros(int i)返回指定的 int 值的二进制补码表示形式中最低(“最右”)的为 1 的位后面的零位个数.

长寿区17760677410: Java中关于Integer的疑问? -
艾泳氟他: Java中行参的传递是值传递 形参 i 的值传过去后,产生一个指向i的引用副本(暂另其为i1),但是i1=8 相当于i1=new Integer(8) 产生了一个新对象,而i1现在所指向的就是这个新的对象,i1有了新的地址,和原来的对象再也没有了关系,在main函数中,第二个System.out.println(i);中的i仍是不是i1,因此打印的对象仍然是i;此问题重要的是理解1. 值传递2. i1=8相当于i1=new Integer(8)产生了一个新对象

长寿区17760677410: java String语句的问题,请高手来 -
艾泳氟他: String tom=new String("TOMS");指的是创建了一个新的String类对象,它内部的字符串是"TOMS" String tom="TOMS";意思是本来就存在一个String类对象"TOMS",现在创建了它的一个引用tom 你的代码:String tom=new String("TOMS"); String toms=new String("TOMS"); 创建了两个对象,他们内部的字符串都是"TOMS",因为是不同对象,所以不相等 String tom="TOMS"; String toms="TOMS"; 创建了两个引用,他们指向同一个对象"TOMS",他们是相等的

长寿区17760677410: Java中的outer和inner的用法 -
艾泳氟他: Java中的outer,基本上用于当嵌套for循环时,如果使用break,用于跳出循环体,以防止死循环. Java中Inner Class可以在一个类中把逻辑意义相同的部分放在一起,便于管理. Outer Class 的成员函数可以像访问其他类一样来访问Inner ...

长寿区17760677410: 用java求S=1+2+……+n的值 -
艾泳氟他: public class Test { public static void main(String[] arges) { int n=20; int sum=0; for(int i=1;i { sum+=i; } System.out.println(sum); } }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网