八大数据类型和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的栈内存堆内存都不变相比, 这里改变了堆内存的内容, 所以值发生变化.
*
* 可以做一个实验, 在普通引用数据类型做形参的时候, 不改变堆内存的内容, 先改变一下 栈内存的地址, 这样也不会发生变化.
*/

最新文章

  1. GIT和SVN之间的区别及基本操作对比
  2. ESENT分布式数据存储
  3. iOS PresentViewControlle后,直接返回根视图
  4. iOS异步下载下载进度条显示
  5. 使用苏飞httphelper开发自动更新发布文章程序
  6. ELK部署
  7. MongoDB之三(高级操作 聚合、游标)
  8. php排序之冒泡排序
  9. android小知识之邮箱地址输入自动完成
  10. SetBkMode可设置文字背景色:TRANSPARENT或OPAQUE
  11. Beego学习笔记——Config
  12. 第九十六节,JavaScript概述
  13. FZU 1397 保送
  14. java基础知识6-- 抽象类,抽象方法,接口,构造方法,类方法等易混淆的知识点
  15. CentOS7 编译安装Nginx+php并配置php-fpm模块
  16. vue.js移动端配置flexible.js
  17. 痞子衡嵌入式:第一本Git命令教程(2)- 连接(remote/clone)
  18. centos 检测aufs 并安装
  19. Error: Cannot find module PhantomJS
  20. c++ 重载、覆盖 (隐藏)(virtual)

热门文章

  1. codeforces 938F(dp+高维前缀和)
  2. Spring MVC的Hello World例子
  3. 过滤器链chain.doFilter(request,response)含义
  4. html5摇一摇代码优化
  5. 容器使用笔记(List篇)
  6. Deepin-我为什么推荐它!
  7. Mapreduce运行过程分析(基于Hadoop2.4)——(三)
  8. 修改linux环境变量配置文件
  9. IO获取指定目录及其目录下子目录
  10. linux 【目录】