精华内容
下载资源
问答
  • 字符串常量一个地址常量,将字符串赋值给字符数组后,为什么数组名值与字符串常量值并不一致?![图片](https://img-ask.csdn.net/upload/201705/16/1494890144_528741.jpg)
  • char str[3] = {'a','b','\0'}; cout; //1 char *pChar = str; cout; //2 int in[3] = {1,2,3};... 以上代码,1和2处str、pChar不是...为什么输出的是“ab”,而不是一个地址? 3处in输出就是个地址。 ```
  • 字符串内容一旦定义了就不能改变。每次改变都会重新开辟一个内存空间存储新内容。...两个实例化的字符串什么返回false? 解释: 在栈中开辟mian方法空间,然后实例化字符串 s1,s1实例化...

    字符串内容一旦定义了就不能改变。每次改变都会重新开辟一个内存空间存储新的内容。
    字符串创建对象(赋值)有两种方式:
    通过构造方法创建对象。
    通过直接赋值创建对象。
    如图:字符串两种创建对象
    区别:
    构造方法创建字符串实在堆中。
    直接赋值的字符串在方法区的常量池中。
    如图:
    运行结果
    两个实例化的字符串为什么返回false?
    构造方法创建对象图
    解释:
    在栈中开辟mian方法空间,然后实例化字符串 s1,s1实例化是在堆中开辟了空间地址值为001,但是字符串“hello”却存储在方法区中的常量池中,并有地址002。
    字符串s2实例化,也是在堆中开辟了空间地址值为003,是字符串“hello”却存储在方法区中的常量池中,并有地址002。虽然s1,s2的内容相同,但是他们实例化开辟的地址
    是不同的,所以 s1==s2 返回的false。

    直接赋值的两个字符串却返回true。
    直接赋值创建对象
    解释:
    直接赋值的字符串,它的内容并不需要开辟内存空间,而是直接在字符串变量池查询,如果有相同的就把地址值给它。但是当其中一个字符串改变时,又会重新寻找与
    之相同的字符串,没有就会重新创建。不会影响它原来的地址。

    展开全文
  • go为什么不能获取字符串某个字符地址?go如此设定目的是什么
  • 2.list中打印的确数组类型的字符串,原因list类继承自下图中AbstractList类, 该类又继承了AbstractCollection类,该类重写了toString方法.返回的是数组类型的字符串,如下图所示: 因此,list也继承了...

    **1.原因是object.java类是所有类的基类,称为父类/超类,java中所有的类都会继承该类,而该类的toString方法打印的就是内存地址.当System.out.println(X)的时候,实际打印的就是X.toString()方法的内容,如果X元素没有重写toString()方法那么就是内存地址值,如果重写了就是数组类型的字符串,**至于System.out.println(X)方法为什么会打印的就是X.toString()的内容,在下面以list和array做详细介绍.
    2.list中打印的确是数组类型的字符串,原因是list类继承自下图中的AbstractList类,
    在这里插入图片描述
    该类又继承了AbstractCollection类,该类重写了toString方法.返回的是数组类型的字符串,如下图所示:
    在这里插入图片描述
    因此,list也继承了重写后的toString()方法.
    我们再看一下System.out.println()方法,进入到println()方法发现,他打印的就是元素的toString()的内容,如下图所示:
    在这里插入图片描述
    进入上图方法中,点击valueof()方法,进入到下图中:
    在这里插入图片描述
    我们发现,其实System,out.println()方法打印的就是传入的该元素的toString()的值,在结合list中已经重写了该方法,因此打印的是数组类型的字符串.
    3.数组为什么重写后还是内存地址,必须要用Ayyays.toString(数组)才能打印数组类型的字符串?
    原因与list中原因是一致的,因为数组的Arrays类重写了toString()方法,而本身创建的数组没有重写toString()的方法,因此打印出来的就是内存值.

    展开全文
  • <p style="text-align:center"><img alt="" height="552" src="https://img-ask.csdnimg.cn/upload/1617553485935.jpg" width="1041" /></p> 如图。...那为什么不显示这个字符串的地址呢?</p>
  • ![图片说明](https://img-ask.csdn.net/upload/201903/20/1553082253_514419.png)![图片说明](https://img-ask.csdn.net/upload/201903/20/1553082273_282711.png)![图片说明]...
  • 代码 注意:当方法区内的常量池有该字符串,以后再使用也就是调用该方法区内的... 猜想:存放字符串的地址值不同,方便程度不同 结果:构造方法创建的字符串对象在堆内存 直接赋值方式创建的对象在方法区的常量

    代码

    注意:当方法区内的常量池有该字符串,以后再使用也就是调用该方法区内的该字符串(实际上),构造方法创建的字符串对象和直接赋值方式创建的字符串对象本质上是调用方式的不同(所以地址值有区别)

    package MyString;
    /*
           构造方法创造的字符串对象和直接赋值方式创建的字符串对象有什么区别?
                猜想:存放字符串的地址值不同,方便程度不同
    
             结果:构造方法创建的字符串对象是在堆内存
                  直接赋值方式创建的对象是在方法区的常量池。
    
                 字符串的内容是存储在方法区的常量池内的,为了方便字符串的重复利用
    
           扩充:  == 比较符号两边的数值
                     基本数据类型:比较的是基本数据类型的值是否相同(true/false)
                     引用数据类型:比较的是引用数据类型的地址值是否相同(true/false)
     */
    public class StringDemo2 {
        public static void main(String[] args) {
            String s5="hello";
            //构造方法创造的字符串对象
            String s1=new String("hello");
            //直接赋值方式创建的字符串对象
            String s2="hello";
            //先看输出值
            System.out.println("s1:"+s1);
            System.out.println("s2:"+s2);
    
            String s3="hello";
            String s4=new String("hello");
            System.out.println("s1==s2? "+(s1==s2));//false
            System.out.println("s1==s3? "+(s1==s4));//false
            System.out.println("s2==s4? "+(s2==s3));//true
            System.out.println("s5==s1? "+(s5==s1));//false
            System.out.println("s5==s2? "+(s5==s2));//true
            System.out.println("s5==s3? "+(s5==s3));//true
            //其中如果构造方法创建的字符串对象在直接赋值后,则直接赋值会在常量池开辟一个新内存存放该字符串
            //往后再有直接赋值与该字符串相同的数据,则栈内存方法直接指向该方法区的常量池内的该字符串地址
            //而构造方法由于在堆内存开辟了新的空间,所以需要二次(多次)寻址才能调用该常量池内的字符串
            //由此来看,除去第一次开辟后,常量池内有该字符串,字符串的利用还是直接赋值创建对象更加方便省事
        }
    }
    

    图示

    在这里插入图片描述

    展开全文
  • <p style="text-align:center"><img alt="" height="672" src=...为什么printf用直接p会出现字符串而不是地址,我觉得用*p才会出现字符串,这什么呢?    </p>
  • 代码如下 <code>#include <stdio.h> #include <stdlib.h>...但是这段代码为什么输出的是字符串。我认为正确输出代码 <code>printf("%s",*ptr);</code></pre>  </p>
  • 如图,直接取二者的地址是不一样...s2取的是两个字符串对象的地址,对象的地址是在栈区的,所以肯定不一样。只是实际上整个程序内存中应该只有一个"hello",这是我的理解,有问题的话麻烦评论指出我的错误,谢谢。 ...

    在这里插入图片描述

    如图,直接取二者的地址是不一样的。
    但实际上二者应该是共用常量数据区内的一片地址。但&s1、&s2取的是两个字符串对象的地址,对象的地址是在栈区的,所以肯定不一样。只是实际上整个程序内存中应该只有一个"hello",这是我的理解,有问题的话麻烦评论指出我的错误,谢谢。

    展开全文
  • #include <stdio.h> #include <stdlib.h> int main() ... //[color=#FF0000]这里fputs函数第一个参数为什么可以不是字符型地址?而是字符串?[/color] fclose(fp); return 0; }
  • C语言中,为什么字符串可以赋值给字符指针变量 char *p; a='5'; p=&a; //显然正确, p="abcd"; //但为什么也可以这样赋值?? 问:一直理解不了为什么可以将字串常量赋值给字符指针变量,请各位指点! 答...
  • 我们想知道为什么字符串不可变的,就要先理解字符串的概念 字符串在存储上类似字符数组,所以它每一位的单个元素都可以提取的,如s=“abcdefghij”,则s[0]=“a”。 为什么字符串不可变的 上文我们可以知道...
  • 字符串

    2021-05-23 17:10:17
    """ 字符串的驻留机制 ... 不会开辟新空间,而是把该字符串的地址赋给新创建的变量 3.字符串的驻留机制 驻留机制的几种情况(交互模式): 3.1字符串的长度为0或1时 3.2符合标识符的字符串 3.3字符串只在编译
  • public class StringDemo2 { ...s1==s2结果false,说明它们的地址不同的。但是为什么s1.getClass().getName() + "@" + s1.hashCode()ode(2/s1.getClass().getName() + "@" 2 s1.hashCode()却一样的???
  • 看下面这段代码 #include<stdio.h> void test(char *a){ ... //a形参根据存储的res的地址的值取寻找res存储的字符串内容 //printf("%s\n",a); } int main(){ char res[256] = "1234567887
  • 一直被字符串数组以及指向字符串指针所初的地址所困扰,然而今天第三次看c/c++安全编码的 时候又遇见了这个问题,strlen(const char)所以我们要来思考以下这些周边的问 0x2问题 数组a[]中的a到底是什么 数组a...
  • 给定一个只包含数字的字符串,复原它并返回所有可能 IP 地址格式。 有效 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 ‘.’ 分隔。 示例: 输入: "25525511135" 输出: ["255.255.11....
  • 指针比较的时候比较的指针存放的地址,而不是指针本身的地址,当然5、6、7、8都一样的值。 同时字符数组呢,存在栈区,四个数组变量,每个变量比较的都数组的首地址,四个不同的变量当然地址不一样啊...
  • 用首地址可以输出字符串的解释

    千次阅读 2017-10-01 18:35:28
    字符数组 看书时遇到一个百思不得其解问题,char* s; 明明s是个首地址,为什么...由于C语言中没有真正的字符串类型,可以通过字符数组表示字符串,因为它元素地址是连续,这就足够了。 C语言中规定数组代表...
  • -去比较两个字符串相等 结果还一直愤愤不平了半天 这两个字符串明明相等 为什么if判断结果一直false呢 最后经过debug调试才发现自己一直忽略了一个很简单知识点== !=比较的是内存地址 字符串用equals比较
  • 什么new String可以直接输出字符串,而自定义类new输出的是地址,我看了String源码,new时候调用了这个构造函数 public String(String original) { this.value = original.value; this.hash = original...
  • 如何检查给定的字符串是否有效URL地址? 我对正则表达式了解基础知识,因此我无法从网上已经看到数百种正则表达式中进行选择。
  • 关于字符串的内存地址

    千次阅读 2013-11-28 23:09:15
    看到一篇博客,给出了下面一道关于C内存笔试题: char*getmemory(void) { char p[]="hello world"; return p; } void test(void) ...请运行test()函数,会有什么结果? 看完第一反应输出"hello
  • Java字符串的使用

    2019-05-17 14:05:32
    Java字符串的使用 字符串不可改变的。 1.字符串的常量池 字符串常量池:当程序中直接协商双引号字符串,该字符串就在常量池中。 例如:String str1 = "abc"; 2.字符串的比较 判断str1==str2true,其余的false...
  • 字符串拼接

    2020-12-22 16:09:48
    字符串的分配和其他对象分配一样,需要消耗高昂的时间和空间的,而且字符串使用的非常多。 因此JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:使用字符串常量池。 每当创建字符串常量时...
  • 问题:字符串指针指向字符串的指针,初始化字符串指针时,不需要为该字符串指针分配内存;而初始化字符串二重指针时,却需要用malloc为二重指针分配内存? 一重字符串指针 首先考虑字符串的存储模型,如下图所示...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,204
精华内容 1,281
关键字:

字符串的地址是什么