JAVA的数组和输入
八大数据类型和String 在进行传递的时候 不会改变.
八大数据类型
- public class parameterValue { //值传递
- public static void main(String[] args) {
- int x = 10;
- method(x);
- System.out.println(x);
- }
- public static void method(int mx) {
- mx = 20;
- }
- /**
- * 在栈内存中申请mx 这时候 x 和mx 存储的值 是一样的,但是x和mx的地址是不一样的,mx=20;并不影响x的值.
- * 八大基本数据类型都是这个吊样.
- * */
- }
String
- package oneDay;
- public class RefDemo1 {
- public static void main(String[] args) {
- String nameString = "小飞";
- String yuanString;
- yuanString = new String("asd");
- System.out.println(yuanString);
- method(nameString);
- System.out.println(nameString);
- }
- private static void method(String name) {
- name = "小贝"; // 相当于 name = new String(); name = "小贝";
- // 相当于 指向改变
- /**
- * 简单解释一下. String nameString 相当于在栈空间中申请了一块空间,用于存储引用地址(此时没有引用地址为空).
- * nameString = 小飞; 相当于 nameString = new String("小飞"); 这时候 在堆内存申请了一块空间用于存储 实际的值.
- * 也就是说 在method 这个方法 当中. 形参 String name 相当于 String name; name = nameString; 这时候 name和nameString在栈内存中
- * 存储的引用地址 是一样的 , 当时当
- * name = "小贝";的时候 该代码 相当于 name = new String("小贝"); 在堆内存中新申请了一块空间, 将该地址 赋予name 这时候 name和nameString在栈内存中
- * 存储的值(引用地址) 就又不一样了. 所以 八大基本数据类型和String 一样 在 方法中进行传递的时候 不会改变自身的值, 但是 类 可以改变自身的值..
- * * */
- }
- }
类
- package oneDay;
- public class RefDemo { //引用传递
- public static void main(String[] args) {
- Duck duckYuan = new Duck();
- System.out.println("Duck age = "+duckYuan.age);
- method(duckYuan);
- System.out.println("Duck age = "+duckYuan.age);
- }
- private static void method(Duck duck) {
- duck.age = 5;
- }
- /**
- * Duck duckYuan = new Duck(); 在栈内存和堆内存中申请空间,并将 堆内存的地址 放入栈内存中,以待使用.
- * 形参中的 Duck duck 在栈内存中申请空间,并将上面的duckYuan内存储的堆内存的地址放入duck中,
- * 然后 方法内的duck.age = 5; 这时候的duck和duckYuan栈内存地址虽然不同,但期内存储的堆内存的地址 都是指向同一块堆内存地址的,这样就改变了原来的值.
- *
- * */
- }
- class Duck{
- int age = 2; //省略封装
- }
为什么 String也是类但是 不会改变呢? 总结一下:
在两个方法当中
- name = "小贝";
- duck.age = 5;
- /**
* 八大基本上数据类型属于值传递.
* String以及其余的引用数据类型属于引用传递.
* 八大基本数据类型和String 不会改变其内容 , 其余的会改变内容.
* 八大基本数据类型: 新申请了栈内存空间, 在函数内的 所有操作都是针对形参的, 无论怎样搞, 都不会改变实参的值.
* String: 新申请了占内存空间, 但是改变String的值的时候, 会将新的堆内存的空间地址放到栈内存当中, 这样的话原本的栈内存和堆内存都没有发生变化, 所以String也不会变.
* 对于普通的引用数据类型, 在调用函数的时候: 新申请的形参存储的是原本引用数据类型的堆内存的地址, 在修改数据的时候会改变原来堆内存的内容. 和String的栈内存堆内存都不变相比, 这里改变了堆内存的内容, 所以值发生变化.
*
* 可以做一个实验, 在普通引用数据类型做形参的时候, 不改变堆内存的内容, 先改变一下 栈内存的地址, 这样也不会发生变化.
*/
JAVA的数组和输入的更多相关文章
- java—数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = input数组中,除了input[i] 之外的所有数的乘积,不用考虑溢出例如 input {2, 3, 4, 5} output: {60, 40, 30, 24}
/** * 小米关于小米笔试题 数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = * input数组中,除了input[i] 之外的 ...
- Java中数组的插入,删除,扩张
Java中数组是不可变的,但是可以通过本地的arraycop来进行数组的插入,删除,扩张.实际上数组是没变的,只是把原来的数组拷贝到了另一个数组,看起来像是改变了. 语法: System.arrayc ...
- java 对象数组
java 对象数组 from zhaocundang@163.com 先 用类声明数组: 再把类的实例赋给数组: package works; import java.util.Scanner; pu ...
- 【图文+视频新手也友好】Java一维数组详细讲解(内含练习题答案+详解彩蛋喔~)
目录 视频讲解: 一.数组的概述 二.一维数组的使用 三.Arrays工具类中的sort方法(sort方法用的多,我们具体讲一下) 四.数组中的常见异常 五.一维数组练习题 六.彩蛋(本期视频使用的P ...
- 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和
057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...
- 056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用
056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用 本文知识点:数组的实际应用 程序开发中如何应用数组? 程序代码及其运行结果: 不同数据类 ...
- Java交换数组元素
Java 交换数组元素 代码示例 import java.util.Arrays; import java.util.Collections; import java.util.List; impor ...
- Java中数组
数组的定义格式: 1: 数据类型[] 数组名 2: 数据类型 数组名 动态初始化: 初始化的时候 系统会默认给数组赋值 数据类型[] 变量名 = new 数据类型[数组长度] int[] arr = ...
- java后台对前端输入的特殊字符进行转义
转自:http://www.cnblogs.com/yangzhilong/p/5667165.html java后台对前端输入的特殊字符进行转义 HTML: 常见的帮助类有2个:一个是spring的 ...
随机推荐
- JavaWeb学习-Tomcat
打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命令的用法如下:
- 找不到 -lz解决方法
sudo apt-get install libghc-zlib-dev
- [转载]Soap安全测试入门
http://www.cnblogs.com/zerotest/p/4670902.html 在SoapUI4.0引入的安全测试特点使它非常容易为你来验证你的目标服务的功能性安全,就可以评估您的系统常 ...
- JSON生成c#类代码小工具(转)
原文地址: http://www.cnblogs.com/tianqiq/archive/2015/03/02/4309791.html
- 用XmlSerializer进行xml反序列化的时候,程序报错: 不应有 <xml xmlns=''>
原因 一,类型错误: 比如xml本来是UserInfo类型 用XmlSerializer进行反序列化传入的类型是MemberInfo这就会报错 二,xml根节点和对象的类名不一致,而又没有对类加入[X ...
- prepareStatement和Statement的区别
1:创建时的区别: Statement stm=con.createStatement(); PreparedStatement pstm=con.prepareStatement(sql ...
- 减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术)
在网站开发过程中,对于页面的加载效率一般都想尽办法求快.那么,怎么让才能更快呢?减少页面请求 是一个优化页面加载速度很好的方法.上一篇博文我们讲解了 “利用将小图标合成一张背景图来减少HTTP请求”, ...
- @media用法。
@media版本:CSS2 兼容性:IE5+ 语法: @media sMedia { sRules } 说明: sMedia : 指定设备名称.请参阅附录:设备类型 sR ...
- mustache模板技术
一.简介Web 模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,通常是标准的 HTML 文档.当然不同的开发语言有不同模板引擎,如 Javascript 下的 Hog ...
- BZOJ4033 [HAOI2015]T1
令$f[p][i]$表示以$p$为根的子树内,选了$i$个黑点,剩下的都是白点的这个子树内贡献的答案 如果$p$的子树都算出来了,只要计算$p$与$fa[p]$之间的边对答案的贡献就好了,贡献是$di ...