java一维数组存字符串,存的是引用还是字符串本身

作者&投稿:商虎 (若有异议请与网页底部的电邮联系)
java里String类型可以直接赋值,保存的是值还是引用的地址?~

首先告诉你,java里的String类型保存的就是引用地址,就像你下面说的,如果用String a="你好" 这种方式赋值的话,a里会保存一个地址,双引号字符串是常量字符串,在java文件编译的时候就放在虚拟机的常量池中,“你好”的真正位置也是在常量池中,另外还有一种方式:String a = new String("你好"),如果这样写就和第一种不一样了,这个对象是在程序运行时创建,不是创建在常量池而是和其他java对象一样在java堆上创建,因此它的地址和第一种的不用。
第二个问题,String和int直接赋值的区别。首先,最大的区别,一个是对象,一个是数值,对象可以为null,数值却必须有值,哪怕你没赋值,系统也会自动赋值为0。int b = 3是直接在内存空间分配了一块空间b内容是3,b的内容是可变的,可以变为5,6……而String对象是不可变的,“你好”实际是在堆中存在的,把引用给了a,如果String a = "bbb"则是把另一个新的对象"bbb"的地址引用给了a,之前的对象“你好”是没有改变的。
第三个问题,为什么引用类型赋值不能像基本数据类型呢?因为引用类型远比基本数据类型复杂啊,基本数据类型只有数值、字符、布尔三种数据类型,可以很简单得表示出来,像2、'a'、true这样,赋值也自然容易,但是引用类型就不一样了,可能要引用的类型是个人,或者是一个职业,这样复杂的东西都是同时包含好多不同属性的,这总不能直接用一个数值就能表示吧,所以要想找它的话只能找它的地址了,然后再根据地址找到对应的对象,虽然麻烦一些,但是也无法避免。
好了,希望我的回答能够对你有所帮助。

new出那个类,然后点出来,静态的直接类名点出来

1、存的是引用,即存的是字符串的首地址。
2、这个方法arraycopy是深度复制,由JVM调用native来完成,看一下源码就可以发现了。

由它完成的复制,都是深度的,不管是简单数据类型还是复杂数据类型,都会得到不同的引用。
希望能解决问题了。

数组是不同的数组,但是数组中字符引用是相同的。


c语言输出n个成绩中小于平均值并且最接近平均值的数.
{ int n,a[25],i,ans=-1;\/\/ans是保存最终的答案 float count=0,ava;\/\/ava是平均值 cin>>n;for(i=0; i<n ;i ){ cin>>a[i];count =a[i];\/\/存储总和 } qsort(a,n,sizeof(a[0]),cmp);\/\/快速排序 ava = count\/n;for(i=0 ;i<n ;i )if(a[i]<ava)\/\/因为排过...

[]和{}的区别 js
在JS中,[]表示数组,{}表示对象;一般在JSON中使用;例如:var json={"eles":["aaa","bbb","ccc","ddd"]};表示对象json的eles属性的值为一个四个元素的数组;可以通过json.eles[0]、json.eles[1]...来获取这些值。。。另外,var arr = new Array();在js中其实可以等价于var arr = [...

Java培训的主要内容是什么?
课程的主要内容包括但不限于以下几个方面:1. Java基础:深入学习Java编程语言的基本概念、语法规则以及面向对象的思想。学员将了解Java的数据类型、运算符、流程控制、数组、字符串等基础知识,并通过实例演示加深理解。2. 面向对象编程:学习面向对象编程的原理和方法,掌握封装、继承、多态等重要特性的应用...

PHP从入门到精通的图书1
书 名: PHP从入门到精通作 者:潘凯华同名出版社:清华大学出版社出版时间: 2008ISBN: 9787302179597开本: 16定价: 68.00 元 VD语音视频教学光盘22小时教学视频录像,全程语音讲解《PHP从入门到精通》实例源程序、相关素材《PHP从入门到精通》特色基础知识一核心技术一高级应用一项目实战268个应用实例,...

公安县15386815063: Java数组中存储的是引用还是值? -
在蚀枸橼: 跟你说一句话你应该就明白了:JAVA中值类型的只有short,char,byte,int,long,double,float,boolean八大基本类型,其他的所有类型都是引用类型.

公安县15386815063: java对象数组中存放的其实是对象的指针对吗 -
在蚀枸橼: 你可以这样理解,其实Java虚拟机内部也确实把它当作指针处理的,这些数组对象存放的是地址,一般地址是存放在栈内存里面的,地址指向对内存中的对象. 可以这么理解,但是千万不要把指针和Java对象混为一谈,Java没有指针的概念,你也无法操作Java虚拟机内部指针的处理,Java数组中存放的其实是对象索引地址,这个对象地址指向对内存中的对象本身.

公安县15386815063: java里String类型可以直接赋值,保存的是值还是引用的地址? -
在蚀枸橼: 先给你一个在博客园看到的说明 问题1 我声明了什么!String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“Hello world!”.这样模糊的回答通常是概念不清的根源.如果要准...

公安县15386815063: JAVA数组存放,int a[]=new int[3],这三个元素是放在堆内存中的;但int a[]={1,2,3},这三个元素存在哪? -
在蚀枸橼: 一样放在堆里 当创建一个数组对象时,实际上就创建了一个引用数组,并且每个引用都会自动被初始化为一个特定值,该值拥有自己关键字null.一旦Java看到null就知道这个引用还没有指向某个对象,在使用之前必须为其指定一个对象.int a[]={1,2,3}等价使用new 可以去看下 《Thinking in Java》

公安县15386815063: java数组和list存的是对象地址还是对象本身 -
在蚀枸橼: 兄弟没你这么问的, List a=new Arraylist() java是值传递,a变量错的是值, 等号右边new Arraylist()是建的一个对象,实质是一块内存空间1,你想能把一个空间给一个值么?或者说给另一个空间么?显然不能,所以变量a存的明显是一个地址,是内存空间1的地址所有引用变量都是一个道理,数组也是引用变量,只有基本类型存的是值,值传递!

公安县15386815063: 一个一维数组可以储存字符串吗??二级字符串数组可以当成一维数组?? -
在蚀枸橼: 一个一维数组可以储存字符串吗??答:一维数组可以存储一个字符串.二级字符串数组可以当成一维数组??如char a[3]={"sfdf","dgfg","ryfff"}; 这个是错的,入下两个写法是对的 char a[3][8]={"sfdf","dgfg","ryfff"}; char *a[3]={"sfdf","dgfg","ryfff"};

公安县15386815063: java在存储数组时栈内存和堆内存的联系 -
在蚀枸橼: 你好,简单而不失准确的概括如下: 数组的引用保存在占内存中,在堆内存中开辟一片空间(连续的),然后栈内存上的引用指向这片空间的首地址.

公安县15386815063: java中Array<List<String>>表示什么意思? -
在蚀枸橼: java中<>表示使用泛型,Array>表示的意思是一个数组里面存放的是list集合,而该list集合中存储的是字符串类型的数据.在java中<>表示使用泛型,是用来规定存入集合中的类型一致的技术,他使得集合必须存储数据类型一致的数据,这样在从集合中取数据时,就不需要强转数据类型,而是通过你给定的泛型类自动转换类型!

公安县15386815063: 10个元素的一维数组存储一个最多有9个字符的字符串,而100个元素的二维数组存储10个最多10个字符,为什么 -
在蚀枸橼: 一串字符后电脑会默认加上一个/0后存在一维数组中,所以10个元素的一维数组用来存字符串的话只能存9个,因为第十个是/0,表示字符串的结束,计算机靠这个/0来确定字符串在哪里结束,而字符则不需要在最后加上/0就可以存储,懂了吗?

公安县15386815063: 是不是带结束符的一维字符数组才是字符串 -
在蚀枸橼: 字符串是借助于一维数组存放的,一个字符串占一个一维数组,数组的大小由字符串的长度决定.一维数组可以存放整数、实数、字符等不同类型的数据.当用一维数组存放字符的时候,数组中必须有\0才可以当做是字符串处理,否则,不能.例如:char s[10]={'a','b','c'};//数组初始化,没有赋值的数组元素系统自动赋值为\0 所以可以认为数组s中存放的是字符串abc 但如果: char s[10]; int i; for(i=0;i<3;i++) scanf("%c",&s[i]); //用循环给数组的前三个元素赋值,这时后面的所有元素没有值 这种情况下,数组s中只是存放管理三个字符,分别是a,b,c而不是字符串abc

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