【Java】在方法中修改引用是不管用的

Java在方法中修改引用是不管用的

可以修改传入对象中的值,

但是如果直接修改传入对象(即引用),方法是不能修改对象的,除非方法使用返回值的方式将改引用后的对象传回给原对象:

 nodeleft =  gaiYinyong(nodeleft)

从下边的代码可以看出,在不修改对象的引用的情况下,修改都是有效的,但是一旦改了引用,之后的对象.属性修改都会无效:

 public class zhengZe {
     public static void main(String[] args) {
         zhengZe z = new zhengZe();
         TreeNode nodeleft = new TreeNode(4);
         System.out.println("main中原本的值 = " + nodeleft);
       
         z.gaiYingyong(nodeleft);
         System.out.println("main中的node。val = "+nodeleft);
         System.out.println(nodeleft.hashCode());
       
         z.gaiZhi(nodeleft);
         System.out.println("main中改值得node。val = " + nodeleft);
         System.out.println(nodeleft.hashCode());
    }
 ​
     public void gaiYingyong(TreeNode root){
         TreeNode node = new TreeNode(2);
       //可以看出nodeleft修改引用前,修改值有效;在修改引用之后,无效
         root.val = 3;
         root = node;
         root.val = 2;
       //可以看出nodeleft修改引用前,修改值有效;在修改引用之后,无效
         System.out.println("改引用中的node。val = "+root);
         System.out.println(root.hashCode());
    }
   
     public void gaiZhi(TreeNode root){
         root.val = 2;
         System.out.println("改值中的node。val = " + root);
         System.out.println(root.hashCode());
    }
 }
 ​
 // Definition for a binary tree node.
 class TreeNode {
       int val;
       TreeNode left;
       TreeNode right;
       TreeNode() {}
       TreeNode(int val) { this.val = val; }
       TreeNode(int val, TreeNode left, TreeNode right) {
           this.val = val;
           this.left = left;
           this.right = right;
      }
 ​
     @Override
     public int hashCode() {
         return Objects.hash(val, left, right);
    }
 ​
     @Override
     public String toString() {
         return "TreeNode{" +
                 "val=" + val +
                 ", left=" + left +
                 ", right=" + right +
                 '}';
    }
 }
 ​
 ​

如果深究其原理的话,应该是:gaiYingyong之外的nodeleft依旧指向nodeleft;但是在gaiYingyong之中的nodeleft已经指向了新的引用对象,所有对nodeleft的修改都是对新引用对象的修改,而这个引用修改对方法外的nodeleft不生效。

即:(在无返回的情况下,方法无法修改引用对象)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你在 Linux 环境下使用 Java 并且遇到了 FontProvider 字体引用不生效的问题,可能是因为字体文件路径设置不正确。以下是一些可能有用的方法: 1. 检查字体文件路径是否正确 请确保字体文件路径是正确的。在 Linux 上,字体文件通常位于 `/usr/share/fonts` 目录下。你可以使用以下命令来查找字体文件: ``` find /usr/share/fonts -type f -name "*.ttf" ``` 请将上述命令的文件扩展名 `.ttf` 替换为你需要查找的字体文件扩展名。 2. 设置字体文件路径 你需要在 Java 代码设置字体文件路径,以便让 FontProvider 正确引用字体文件。以下是一个示例代码: ```java import com.itextpdf.text.pdf.BaseFont; import java.io.IOException; public class FontProviderTest { public static void main(String[] args) throws IOException { String fontPath = "/usr/share/fonts/arialuni.ttf"; BaseFont baseFont = BaseFont.createFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); System.out.println(baseFont.getPostscriptFontName()); } } ``` 在上面的代码,我们使用 `BaseFont.createFont` 方法来加载字体文件,并将文件路径作为参数传递。请确保文件路径是正确的,并且字体文件存在于该路径下。 3. 设置字体文件权限 请确保 Java 可以读取字体文件。你可以使用以下命令更改字体文件的权限: ``` chmod 644 /usr/share/fonts/arialuni.ttf ``` 在上述命令,请将文件路径替换为你的字体文件路径。 希望这些方法可以帮助你解决 FontProvider 字体引用不生效的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值